¿Es posible asignar solo la primera aparición de clave en un marco de datos?
Por ejemplo:
TestDict = {A: 1, B: 2}
Df
Name Num
A
A
B
B
Producción esperada
Name Num
A 1
A
B 2
B
0
MaxB
8 oct. 2019 a las 20:11
3 respuestas
La mejor respuesta
Use duplicado para encontrar el primero ocurrencia y luego mapa:
df['Num'] = df.Name[df.Name.duplicated(keep='last')].map(testDict)
print(df)
Salida
Name Num
0 A 1.0
1 A NaN
2 B 2.0
3 B NaN
Para eliminar los valores NaN
, si lo desea, haga lo siguiente:
df = df.fillna('')
2
Dani Mesejo
8 oct. 2019 a las 17:23
Puede usar duplicated
y map
:
df['Num'] = np.where(~df['Name'].duplicated(), df['Name'].map(testDict), '')
Salida:
Name Num
0 A 1
1 A
2 B 2
3 B
1
Quang Hoang
8 oct. 2019 a las 17:20
map
el drop_duplicates
, suponiendo que tenga un índice único para la alineación. (Probablemente sea mejor mantener NaN para que la columna siga siendo numérica)
df['Num'] = df['Name'].drop_duplicates().map(testDict)
Name Num
0 A 1.0
1 A NaN
2 B 2.0
3 B NaN
1
ALollz
8 oct. 2019 a las 18:53