You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中按指定列分组将多行内容合并为逗号分隔字符串问题

实现代码

import pandas as pd 
keys = ['ID']
df = pd.DataFrame({
    'ID' : ['01','01','02','03','03','03'],
    'Award' : ['PELL','SCH','SCH','GRANT','PELL','SCH'],
    'Type' : ['FED','LOC','LOC','STA','FED','LOC'],
    'Date' : ['2021-06-01','2021-06-01','2021-06-04','2021-06-02','2021-06-15','2021-07-01'],
})
# 分组后对所有非分组列执行逗号拼接
df_res = df.groupby(keys, as_index=False).agg(lambda series: ', '.join(series))

输出结果

ID               Award          Type                                  Date
0  01           PELL, SCH      FED, LOC              2021-06-01, 2021-06-01
1  02                 SCH           LOC                          2021-06-04
2  03  GRANT, PELL, SCH  STA, FED, LOC  2021-06-02, 2021-06-15, 2021-07-01

说明

  • as_index=False参数会将分组键保留为普通数据列,不会转换为行索引,符合预期输出的表结构。
  • agg传入的匿名函数会作用于每个分组下的所有非分组列,将列内的所有值用逗号拼接为单个字符串,由于所有列已提前转换为字符串类型,不存在类型兼容问题。
  • 该实现支持多列分组场景,仅需要修改keys列表内的分组列名即可,无需调整其他逻辑。

原有写法问题说明

  1. groupby.apply(', '.join)的传入参数是分组后的完整DataFrame对象,join方法默认迭代DataFrame的列名进行拼接,因此会输出列名拼接的错误结果。
  2. groupby.agg(list)已将分组后的各列值转换为列表,也可以通过后续执行dfc.applymap(', '.join).reset_index()得到目标结果,但直接在agg阶段完成拼接效率更高。

内容的提问来源于stack exchange,提问作者dmonder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:57:04