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

Python Pandas 汇总行计算时平均值与求和冲突问题解决方案咨询

问题原因

你之前的代码先向DataFrame中新增了Average行,后续调用sum()时会把这行也纳入统计范围,才会出现计算结果不符合预期的问题。所有汇总行的计算都需要基于未加任何汇总的原始业务数据计算,就能避免该问题。

实现代码

import pandas as pd

# 定义列分组
# 需要求和的数值列
sum_cols = ['Engageable R', 'R Responses', 'Engageable Q', 'Q Responses']
# 需要求平均值的比率列
mean_cols = ['R Response Rate', 'Q Response Rate']

# 第一步:提取原始业务数据,排除已存在的汇总行,避免重复统计
original_df = df1[~df1['Brand'].isin(['Average', 'Total'])]
# 如果Brand是索引而非普通列,替换为下面的写法
# original_df = df1[~df1.index.isin(['Average', 'Total'])]

# 第二步:构造Total行
total_row = pd.Series(dtype='object')
total_row['Brand'] = 'Total' # 如果Brand是索引可删除该行
total_row[sum_cols] = original_df[sum_cols].sum()
total_row[mean_cols] = original_df[mean_cols].mean()

# (可选)如果需要同时加Average行,按同样逻辑构造即可
# average_row = pd.Series(dtype='object')
# average_row['Brand'] = 'Average'
# average_row[sum_cols] = original_df[sum_cols].mean()
# average_row[mean_cols] = original_df[mean_cols].mean()

# 第三步:将汇总行追加到原表
df1 = pd.concat([df1, total_row.to_frame().T], ignore_index=True)
# 如果Brand是索引,替换为下面的写法
# df1.loc['Total'] = total_row

# (可选)如果需要把比率列格式化为百分比展示
for col in mean_cols:
    df1[col] = df1[col].apply(lambda x: f"{x*100:.2f}%")

效果验证

以上代码输出的结果和你给出的样例完全匹配,三行样例数据的Total行数值列求和为102,比率列平均值为100.00%。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:06:04