DataFrame如何按item_no分组拼接item_code并聚合求和item_cost
Pandas按指定字段分组实现多规则聚合
你可以直接用pandas的groupby配合agg自定义聚合规则实现需求,不需要额外循环处理。
核心实现代码
# 若未导入pandas先执行导入 import pandas as pd # 分组聚合,sort=False保留item_no原始出现顺序,和预期输出顺序一致 result_df = df.groupby(by='item_no', as_index=False, sort=False).agg( # item_code字段:同组值转字符串后用逗号拼接 item_code=('item_code', lambda val: ','.join(val.astype(str))), # item_cost字段:同组值累加求和 item_cost=('item_cost', 'sum') )
注意点
- 加
as_index=False是为了不让分组字段item_no变成结果表的行索引,输出结构和普通DataFrame一致 - 拼接
item_code前先转str是为了兼容该字段为数值类型的情况,避免join方法报错 - 加
sort=False可以关闭分组后的默认排序,最终item_no的展示顺序和原表首次出现的顺序一致,完全匹配你给出的预期效果
输出结果
执行代码后得到的result_df结构如下:
| item_no | item_code | item_cost |
|---|---|---|
| 1001 | 11111,11112 | 300 |
| 1004 | 44444 | 100 |
| 1002 | 22222,22221 | 280 |
| 1006 | 66666 | 180 |
内容的提问来源于stack exchange,提问作者SM079
相关产品推荐
相关产品推荐

