Pandas如何在多个列中将字符串分组并连接?

6
我有这个Pandas数据框:
df = DataFrame({'id':['a','b','b','b','c','c'], 'category':['z','z','x','y','y','y'], 'category2':['1','2','2','2','1','2']})

看起来像这样:

  category category2 id
0        z         1  a
1        z         2  b
2        x         2  b
3        y         2  b
4        y         1  c
5        y         2  c

我希望做的是按id分组,并将另外两列作为唯一字符串的连接返回。
结果应该看起来像这样:
  category category2 id
0        z         1  a
1      zxy         2  b
2        y        12  c
1个回答

21

使用groupby / agg聚合分组数据。 对于每个分组,应用set来查找唯一字符串,并使用''.join来连接字符串:

In [34]: df.groupby('id').agg(lambda x: ''.join(set(x)))
Out[34]: 
   category category2
id                   
a         z         1
b       yxz         2
c         y        12

要将id从索引移动到结果DataFrame的列中,请调用reset_index

In [59]: df.groupby('id').agg(lambda x: ''.join(set(x))).reset_index()
Out[59]: 
  id category category2
0  a        z         1
1  b      yxz         2
2  c        y        12

1
使用groupby、agg和lambda在较大的数据框上速度相当慢...有没有方法可以加快这个过程? - Edgar

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