首页 > 解决方案 > Groupby并连接多列

问题描述

我有一个像这样的数据框:

ID  CODE  GROUP  PIN
 1   99     A     221
 1   89     B     443
 2   79     A     230
 2   69     A     000
 3   59     D     781
 3   49     T     665

我想按 ID 列分组并连接所有其他以逗号分隔的字段,因此我得到如下输出:

 ID  CODE     GROUP      PIN
 1   99,89     A,B     221,443
 2   79,69     A,A     230,000
 3   59,49     D,T     781,665

我可以按 ID 分组并返回串联的 CODE 字段,但我需要对多个字段执行此操作:

df = DATA.groupby('ID')['CODE'].apply(',' .join).reset_index(drop = False)

这仅返回分组的 ID 字段和串联的 CODE 字段。如何将 groupby 扩展到多列?

非常感谢

标签: pandasdataframepandas-groupby

解决方案


如果要避免转换ID为字符串 use DataFrame.set_index,请将所有列转换为字符串并GroupBy.agg分别用于处理每一列:

df = DATA.set_index('ID').astype(str).groupby('ID').agg(',' .join).reset_index()
print (df)
   ID   CODE GROUP      PIN
0   1  99,89   A,B  221,443
1   2  79,69   A,A    230,0
2   3  59,49   D,T  781,665

print (df.dtypes)
ID        int64
CODE     object
GROUP    object
PIN      object
dtype: object

如果ID是字符串或可能转换为字符串:

df = DATA.astype(str).groupby('ID').agg(',' .join).reset_index()
print (df)
  ID   CODE GROUP      PIN
0  1  99,89   A,B  221,443
1  2  79,69   A,A    230,0
2  3  59,49   D,T  781,665

print (df.dtypes)
ID       object
CODE     object
GROUP    object
PIN      object
dtype: object

推荐阅读