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

如何按ID分组,汇总不同ID2对应的特征行求和并生成指定列?

解决方案

可以通过「计算行特征总和 → 分组聚合 → 转宽表」三步实现需求,具体代码如下:

1. 准备示例数据

import pandas as pd

# 构造原始DataFrame
df = pd.DataFrame({
    'ID': [2,2,1,2,2],
    'ID2': [2,2,1,2,1],
    'Feature1': [8,4,8,1,3],
    'Feature2': [5,8,6,3,7],
    'Feature3': [7,8,2,7,5],
    'Feature4': [3,3,5,4,9],
    'Feature5': [7,6,1,9,7]
})

2. 计算每行的特征列总和

先把每行的Feature1到Feature5求和,得到单条数据的特征总价值:

# 筛选所有以Feature开头的列,按行求和
df['row_sum'] = df.filter(like='Feature').sum(axis=1)

3. 分组聚合并转宽表

按ID和ID2分组求和,再将ID2转为列(缺失的分组用0填充),最后调整列名:

方法一:groupby + unstack

# 按ID、ID2分组求和,unstack将ID2转为列,fill_value填充缺失值为0
grouped = df.groupby(['ID', 'ID2'])['row_sum'].sum().unstack(fill_value=0)
# 重命名列
grouped.columns = ['Sum_ID2_values1', 'Sum_ID2_values2']
# 重置索引,让ID成为普通列
result = grouped.reset_index()

方法二:pivot_table(更直接的透视表方式)

# 用透视表聚合,index是ID,columns是ID2,values是行总和,aggfunc用sum,缺失值填0
result = pd.pivot_table(
    df,
    index='ID',
    columns='ID2',
    values='row_sum',
    aggfunc='sum',
    fill_value=0
)
# 重命名列并重置索引
result.columns = ['Sum_ID2_values1', 'Sum_ID2_values2']
result = result.reset_index()

最终输出

运行后得到的result即为预期格式:

ID  Sum_ID2_values1  Sum_ID2_values2
0   1               22                0
1   2               31               83

关键说明

你之前尝试groupby或pivot_table未成功,大概率是没先计算每行的特征总和——需求是先把每行的所有特征加起来,再按ID+ID2分组求和,而非直接对特征列按组求和后合并。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 07:38:32