Pandas groupby con unión delimitadora

Resuelto Arun asked hace 7 años • 2 respuestas

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

Arun avatar Jun 05 '17 19:06 Arun
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')
MaxU - stand with Ukraine avatar Jun 05 '2017 12:06 MaxU - stand with Ukraine

sólo inténtalo

group = df.groupby(['col'])['val'].apply(lambda x: '-'.join(x))
ℕʘʘḆḽḘ avatar Jun 05 '2017 12:06 ℕʘʘḆḽḘ