带有分隔符的熊猫groupby加入

Aru*_*run 3 python-3.x pandas pandas-groupby

我试图使用groupby对具有多个值的行进行分组。

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()
Run Code Online (Sandbox Code Playgroud)

我有

A CatTiger
B BallBat
Run Code Online (Sandbox Code Playgroud)

我想引入一个定界符,这样我的输出看起来像

A Cat-Tiger
B Ball-Bat
Run Code Online (Sandbox Code Playgroud)

我试过了,

group = df.groupby(['col'])['val'].sum().apply(lambda x: '-'.join(x))
Run Code Online (Sandbox Code Playgroud)

这产生了,

A C-a-t-T-i-g-e-r
B B-a-l-l-B-a-t
Run Code Online (Sandbox Code Playgroud)

这是什么问题?

谢谢,

美联社

ℕʘʘ*_*ḆḽḘ 6

你试一试

group = df.groupby(['col'])['val'].apply(lambda x: '-'.join(x))
Run Code Online (Sandbox Code Playgroud)


Max*_*axU 6

或者,您可以通过以下方式进行操作:

In [48]: df.groupby('col')['val'].agg('-'.join)
Out[48]:
col
A    Cat-Tiger
B     Ball-Bat
Name: val, dtype: object
Run Code Online (Sandbox Code Playgroud)

更新:从评论中回答问题:

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
Run Code Online (Sandbox Code Playgroud)

最后用于将索引或MultiIndex转换为列:

df1 = df.groupby('col')['val'].agg('-'.join).reset_index(name='new')
Run Code Online (Sandbox Code Playgroud)