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

如何在Pandas DataFrame中按分组合并行?附输入输出示例

实现思路:将输入DataFrame转换为目标格式

核心逻辑:按ID+C分组,聚合item与Counter数据

从输入数据结构来看,我们需要以ID和C的组合作为分组依据,对每个分组内的item和Counter进行整理,以下是两种常见场景的实现方案:


方案1:转换为宽表(透视表)

如果目标输出是把每个item作为独立列,对应展示该分组下的Counter值,可使用pivot方法:

import pandas as pd

data = {
    'ID': [500, 500, 500, 500, 500, 500, 500, 500, 400, 400, 400, 400, 400, 300, 200],
    'item': ['A', 'B', 'C', 'D', 'E', 'A', 'B', 'C', 'A', 'B', 'A', 'C', 'E', 'D', 'E'],
    'Counter': [1, 2, 3, 4, 5, 1, 2, 3, 1, 2, 1, 2, 1, 1, 1],
    'C': ['XX', 'XX', 'XX', 'XX', 'XX', 'YY', 'YY', 'YY', 'XX', 'XX', 'YY', 'YY', 'YY', 'XX', 'XX']
}
df = pd.DataFrame(data)

# 生成透视表,ID+C作为行索引,item作为列,Counter为值
pivot_result = df.pivot(index=['ID', 'C'], columns='item', values='Counter').reset_index()
# 处理缺失值与列名
pivot_result = pivot_result.fillna(0).rename_axis(None, axis=1)
print(pivot_result)

输出示例(截取部分):

ID   C  A  B  C  D  E
0  200  XX  0  0  0  0  1
1  300  XX  0  0  0  1  0
2  400  XX  1  2  0  0  0
3  400  YY  1  0  2  0  1
4  500  XX  1  2  3  4  5
5  500  YY  1  2  3  0  0

方案2:聚合为列表格式

如果目标输出是把每个分组下的item和Counter打包成列表,可使用groupby+agg组合:

# 按ID+C分组,聚合item和Counter为列表
grouped_result = df.groupby(['ID', 'C']).agg(
    item_list=('item', list),
    counter_list=('Counter', list)
).reset_index()
print(grouped_result)

输出示例(截取部分):

ID   C       item_list counter_list
0  200  XX             [E]          [1]
1  300  XX             [D]          [1]
2  400  XX          [A, B]       [1, 2]
3  400  YY       [A, C, E]    [1, 2, 1]
4  500  XX  [A, B, C, D, E]  [1, 2, 3, 4, 5]
5  500  YY       [A, B, C]    [1, 2, 3]

关键说明

  • 两种方案可根据实际目标输出格式选择,透视表适合需要横向展示各item数据的场景,列表聚合适合保留原始序列的场景。
  • 如果目标输出有特殊格式要求(比如自定义列名、特定缺失值处理),可在基础代码上添加rename、replace等方法调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:22:44