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

如何根据列分组字典对Pandas DataFrame按行计算分组列总和生成汇总列

实现方案

你可以通过自定义函数,配合Pandas按行求和的方法实现需求,完整实现代码如下:

import pandas as pd

# 示例数据初始化
d = {'a': [0,1,0,1,1,1], 'b': [1,1,1,1,1,1], 'c': [0,0,0,0,0,1], 'd': [1,0,1,1,1,0]}
col_group_map = {'a':'top','b':'bot','c':'top','d':'bot'}
df = pd.DataFrame(d)

# 自定义汇总函数
def add_group_total(df, group_name, col_group_map):
    # 筛选当前分组对应的所有列
    target_cols = [col for col, group in col_group_map.items() if group == group_name]
    # 按行对目标列求和,生成汇总列
    df[f'total_{group_name}'] = df[target_cols].sum(axis=1)
    return df

# 调用函数添加两个分组的汇总列
df = add_group_total(df, 'top', col_group_map)
df = add_group_total(df, 'bot', col_group_map)

# 输出结果查看
print(df)

代码说明

  • 函数入参里的col_group_map就是你提供的列和分组的映射字典,如果你的映射关系是固定的,也可以直接写在函数内部不用作为入参传递
  • 核心逻辑是df[target_cols].sum(axis=1),其中axis=1指定按行计算,默认axis=0是按列计算
  • 如果你需要一次性批量添加所有分组的汇总列,可以用循环批量调用函数:
for group in set(col_group_map.values()):
    df = add_group_total(df, group, col_group_map)

运行后得到的输出结果完全符合预期:

abcdtotal_toptotal_bot
010102
110011
010102
110112
110112
111021

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:24:03