Tengo un marco de datos como este:
A B C
0 1 0.749065 This
1 2 0.301084 is
2 3 0.463468 a
3 4 0.643961 random
4 1 0.866521 string
5 2 0.120737 !
Vocación
In [10]: print df.groupby("A")["B"].sum()
volverá
A
1 1.615586
2 0.421821
3 0.463468
4 0.643961
Ahora me gustaría hacer "lo mismo" para la columna "C". Debido a que esa columna contiene cadenas, sum () no funciona (aunque podría pensar que concatenaría las cadenas). Lo que realmente me gustaría ver es una lista o un conjunto de cadenas para cada grupo, es decir
A
1 {This, string}
2 {is, !}
3 {a}
4 {random}
He estado tratando de encontrar formas de hacer esto.
Series.unique () ( http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.unique.html ) no funciona, aunque
df.groupby("A")["B"]
es un
pandas.core.groupby.SeriesGroupBy object
así que esperaba que cualquier método de Series funcionara. ¿Algunas ideas?
apply
ylambda
s. Vine aquí preguntándome por qué enpandas
realidad concats y no devuelve un error al sumar cadenas.Puede utilizar el
apply
método para aplicar una función arbitraria a los datos agrupados. Entonces, si quieres un juego, aplicaset
. Si quieres una lista, aplicalist
.Si quieres algo más, escribe una función que haga lo que quieras y luego
apply
eso.fuente
.reset_index()
.Es posible que pueda utilizar la función
aggregate
(oagg
) para concatenar los valores. (Código no probado)fuente
Puedes probar esto:
fuente
una solución simple sería:
fuente
df.groupby(['A','B']).c.unique().apply(lambda x: ';'.join(x)).reset_index()
Agregaciones con nombre con
pandas >= 0.25.0
Desde la versión 0.25.0 de pandas, hemos nombrado agregaciones en las que podemos agrupar, agregar y al mismo tiempo asignar nuevos nombres a nuestras columnas. De esta forma no obtendremos las columnas MultiIndex, y los nombres de las columnas tienen más sentido dados los datos que contienen:
agregar y obtener una lista de cadenas
agregar y unir las cuerdas
fuente
Si desea sobrescribir la columna B en el marco de datos, esto debería funcionar:
fuente
Siguiendo la buena respuesta de @ Erfan, la mayoría de las veces, en un análisis de valores agregados, desea las combinaciones posibles únicas de estos valores de caracteres existentes:
fuente