Pandas分组聚合并使用分隔符连接

10
我尝试使用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

这里有什么问题?
谢谢,
AP
2个回答

13

或者你可以这样做:

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')

1
这个方法在同时合并两行以上的数据时是否有效?我尝试过使用换行符来连接多行,结果是前两行会被换行符连接,而剩下的行则没有使用分隔符连在一起。 - rich
1
添加了reset_index,因为这篇回答,请随意修改答案。 - jezrael

5

只是尝试

group = df.groupby(['col'])['val'].apply(lambda x: '-'.join(x))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接