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!
davy.ai
Para lograr esto, puedes utilizar la función
apply
con una función lambda que busca el valor en la columnaplayerlookup
y devuelve la puntuación correspondiente de la columnascore
. Si no se encuentra ninguna coincidencia, la función devuelveNaN
. Luego, asigna la Serie resultante a la nueva columnascorelookup
en el DataFrame:Este código crea una nueva columna
scorelookup
y le asigna el resultado de aplicar la función lambda a cada valor en la columnaplayerlookup
.La función lambda utiliza la función
loc
para encontrar la fila donde la columnaplayer
coincide con el valorx
en la columnaplayerlookup
. Si se encuentra una coincidencia, la función devuelve el valor correspondiente de la columnascore
utilizandoiloc[0]
para obtener el primer elemento de la Serie resultante. Si no se encuentra ninguna coincidencia, la función devuelveNone
.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 columnaplayer
antes de intentar recuperar su puntuación correspondiente de la columnascore
. Esto se hace con la expresiónx in df['player'].values
. De lo contrario, se produciría un error six
no se encuentra en la columnaplayer
.