¿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
58291041