我尝试使用 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()
我有
A CatTiger B BallBat
我想引入一个分隔符,以便我的输出看起来像
A Cat-Tiger B Ball-Bat
我试过,
group = df.groupby(['col'])['val'].sum().apply(lambda x: '-'.join(x))
结果如下:
A C-a-t-T-i-g-e-r B B-a-l-l-B-a-t
这里的问题是什么?
或者你也可以通过以下方式进行:
In [48]: df.groupby('col')['val'].agg('-'.join) Out[48]: col A Cat-Tiger B Ball-Bat Name: val, dtype: object
更新:回答评论中的问题:
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
最后将索引或多索引转换为列:
df1 = df.groupby('col')['val'].agg('-'.join).reset_index(name='new')