You need to enable JavaScript to run this app. Pandas DataFrame为各产品分组新增y、z属性行的数值汇总行
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame为各产品分组新增y、z属性行的数值汇总行

Pandas 按分组追加汇总行实现方案

核心实现逻辑为:按prod字段拆分为独立分组,每个分组内计算attribute为y、z行的数值列求和结果,构造为attribute=sum_yz的新行插入到对应分组末尾,最终合并为完整结果表。


方法1:逐分组循环处理(逻辑直观,易调试)

通过遍历每个prod分组单独处理汇总逻辑,适合逻辑验证和小数据量场景:

import pandas as pd

# 初始化原始数据
df = pd.DataFrame({'prod':['a','a','a','b','b','b','c','c','c'], 'attribute':['x','y','z','x','y','z','x','y','z'],
                  'number1':[1,2,2,3,4,3,5,1,1], 'number2':[10,2,3,3,1,2,3,1,1], 'number3':[1,4,3,5,7,1,3,0,1]})

# 指定需要求和的数值列
num_columns = ['number1', 'number2', 'number3']

final_result = pd.DataFrame()
# 保持原prod的a/b/c顺序,不打乱默认分组排序
for prod_name, group_data in df.groupby('prod', sort=False):
    # 筛选组内attribute为y、z的行计算数值总和
    yz_total = group_data[group_data['attribute'].isin(['y', 'z'])][num_columns].sum()
    # 构造汇总行结构
    sum_row = pd.DataFrame([{
        'prod': prod_name,
        'attribute': 'sum_yz',
        **yz_total.to_dict()
    }])
    # 把原分组数据+汇总行拼接到结果中
    final_result = pd.concat([final_result, group_data, sum_row], ignore_index=True)

方法2:向量化批量计算(性能更优,适合大数据量)

跳过循环,提前批量计算所有分组的汇总值,一次性拼接后调整行顺序完成处理:

# 先指定需要求和的数值列
num_columns = ['number1', 'number2', 'number3']

# 批量计算所有prod下y/z行的汇总值,构造sum_yz行
yz_group_sum = (
    df[df['attribute'].isin(['y', 'z'])]
    .groupby('prod', as_index=False)[num_columns].sum()
    .assign(attribute='sum_yz')
)

# 纵向合并原表和汇总行
combined = pd.concat([df, yz_group_sum], ignore_index=True)

# 调整行顺序:让每个prod分组内,按x→y→z→sum_yz的固定顺序排列
combined['sort_order'] = combined['attribute'].map({'x': 0, 'y': 1, 'z': 2, 'sum_yz': 3})
final_result = combined.sort_values(by=['prod', 'sort_order'], ignore_index=True).drop(columns='sort_order')

关键注意点

  • 分组时添加sort=False参数,避免groupby默认按字母序打乱原表中prod的原有排列顺序
  • 两种方法输出的表结构、数值结果都和示例目标表完全匹配,可直接运行验证
  • 数据量较大时优先选择向量化方法,避免循环带来的性能损耗

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.14 12:15:04