Pandas groupby con unión delimitadora
Intenté usar groupby para agrupar filas con múltiples valores.
col val
A Cat
A Tiger
B Ball
B Bat
import pandas as pd
df = pd.read_csv("Inputfile.txt", sep='\t')
group = df.groupby(['col'])['val'].sum()
Obtuve
A CatTiger
B BallBat
Quiero introducir un delimitador, para que mi salida se vea así
A Cat-Tiger
B Ball-Bat
Lo intenté,
group = df.groupby(['col'])['val'].sum().apply(lambda x: '-'.join(x))
esto cedió,
A C-a-t-T-i-g-e-r
B B-a-l-l-B-a-t
Cuál es el problema aquí ?
Gracias,
AP
Aceptado
Alternativamente puedes hacerlo de esta manera:
In [48]: df.groupby('col')['val'].agg('-'.join)
Out[48]:
col
A Cat-Tiger
B Ball-Bat
Name: val, dtype: object
ACTUALIZACIÓN: respondiendo la pregunta del comentario:
In [2]: df
Out[2]:
col val
0 A Cat
1 A Tiger
2 A Panda
3 B Ball
4 B Bat
5 B Mouse
6 B Egg
In [3]: df.groupby('col')['val'].agg('-'.join)
Out[3]:
col
A Cat-Tiger-Panda
B Ball-Bat-Mouse-Egg
Name: val, dtype: object
Último para convertir índice o MultiIndex a columnas:
df1 = df.groupby('col')['val'].agg('-'.join).reset_index(name='new')
sólo inténtalo
group = df.groupby(['col'])['val'].apply(lambda x: '-'.join(x))