es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Añadiendo columnas utilizando el método loc en un dataframe de pandas

Estoy trabajando con un dataframe que he creado con el siguiente código:

df = pd.DataFrame({'player': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],
                   'playerlookup': ['B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'],
                   'score': ['10', '9', '8', '7', '6', '5', '4', '3']})

Quiero agregar una nueva columna llamada “scorelookup” a este dataframe que, para cada fila, tome el valor en la columna “playerlookup”, busque ese valor en la columna “player” y luego devuelva el puntaje en una nueva columna. Por ejemplo, el valor en la columna “scorelookup” en la primera fila del dataframe sería ‘9’ porque ese fue el puntaje para el jugador ‘B’. En los casos en que el valor en la columna “playerlookup” no esté contenido en la columna “player” (por ejemplo, la última fila de la tabla que tiene un valor de ‘I’ en la columna “playerlookup”), el valor en esa columna estaría en blanco.

He intentado usar un código como:

df['playerlookup'].apply(lambda n: df.loc[df['player'] == n, 'score'])

pero no he tenido éxito.

¡Cualquier ayuda sería muy apreciada!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para lograr esto, puedes utilizar la función apply con una función lambda que busca el valor en la columna playerlookup y devuelve la puntuación correspondiente de la columna score. Si no se encuentra ninguna coincidencia, la función devuelve NaN. Luego, asigna la Serie resultante a la nueva columna scorelookup en el DataFrame:

    df['scorelookup'] = df['playerlookup'].apply(lambda x: df.loc[df['player'] == x, 'score'].iloc[0] if x in df['player'].values else None)
    

    Este código crea una nueva columna scorelookup y le asigna el resultado de aplicar la función lambda a cada valor en la columna playerlookup.

    La función lambda utiliza la función loc para encontrar la fila donde la columna player coincide con el valor x en la columna playerlookup. Si se encuentra una coincidencia, la función devuelve el valor correspondiente de la columna score utilizando iloc[0] para obtener el primer elemento de la Serie resultante. Si no se encuentra ninguna coincidencia, la función devuelve None.

    Finalmente, la Serie resultante se asigna a la columna scorelookup en el DataFrame utilizando la misma sintaxis que para cualquier otra asignación de columna.

    Es importante verificar si x se encuentra en la columna player antes de intentar recuperar su puntuación correspondiente de la columna score. Esto se hace con la expresión x in df['player'].values. De lo contrario, se produciría un error si x no se encuentra en la columna player.

Comments are closed.