Esto puede ser un duplicado por favor hágamelo saber.
Tengo un pandas df como este:
| identificación | nombre | Común |
|---|---|---|
| Uno | UN | |
| Uno | UN | |
| Uno | UN | |
| Uno | B | |
| Dos | C |
Me gustaría generar algo como esto:
Donde se coloca el nombre más común para cada id en la columna común.
| identificación | nombre | Común |
|---|---|---|
| Uno | UN | UN |
| Uno | UN | UN |
| Uno | UN | UN |
| Uno | B | UN |
| Dos | C | C |
He intentado esto, pero en este momento estoy lanzando dardos en la oscuridad.
df.groupby(['id', 'name']).agg(lambda x:x.value_counts().index[0])Esto funciona:
df['Common'] = df.groupby('id')['name'].transform(lambda x: x.mode()[0])Producción:
>>> df id name Common 0 One AA 1 One AA 2 One AA 3 One BA 4 Two CCUn proceso más largo (potencialmente más lento) es pivotar y mapear:
df.assign(Common = df.id.map(df.pivot(None, 'id', 'name').mode().T.squeeze())) id name Common 0 One AA 1 One AA 2 One AA 3 One BA 4 Two CC