【问题标题】:Groupby and string-concatenate multiple columnsGroupby 和字符串连接多列
【发布时间】:2022-04-06 19:24:07
【问题描述】:

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

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

我可以 groupby ID 并返回连接的 CODE 字段,但我需要为多个字段执行此操作:

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

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

非常感谢

【问题讨论】:

    标签: python pandas dataframe pandas-groupby


    【解决方案1】:

    如果要避免将 ID 转换为字符串,请使用 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
    

    【讨论】:

      猜你喜欢
      • 2015-11-14
      • 2020-01-01
      • 1970-01-01
      • 2015-02-02
      相关资源
      最近更新 更多