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

Pandas技巧:分组后如何计算所有分组平均值的总平均值

问题描述

我正在使用Pandas进行数据处理,以下是我的DataFrame:

# initialize list of lists
data = [['A','Excel','1'], ['A','Word','0'], ['A','Java','1'],['B','Excel','1'],['B','Word','0'],['C','Word','0'],['D','Java','1'],['E','PPT','0'], ['E','Word','0'], ['E','Java','1']]
  
# Create the pandas DataFrame
df = pd.DataFrame(data, columns=['System','App','DevTool'])

我通过以下代码得到了每个System对应的DevTool平均值(已转换为百分比):

df.groupby('System')['DevTool'].mean()*100

得到的结果如下:

SystemDevTool Ratio
A66.67
B50.00
C00.00
D100.00
E33.33

请问如何计算这些分组平均值的总平均值?

解决方案

计算分组平均值的总平均值有两种常见方式,可根据需求选择:

1. 算术平均值(直接对分组结果取平均)

如果只需要简单的算术平均,直接对分组后的结果调用mean()即可:

# 获取分组后的比率
grouped_ratios = df.groupby('System')['DevTool'].mean() * 100
# 计算算术总平均
total_avg = grouped_ratios.mean()
print(total_avg)
# 输出:50.0

2. 加权平均值(按分组样本量加权,更贴合真实整体水平)

每个System对应的记录数不同(比如A有3条,C只有1条),加权平均能更准确反映整体情况,计算逻辑是用所有DevTool的总和除以总记录数:

# 直接计算整体DevTool平均值并转百分比
weighted_total_avg = df['DevTool'].mean() * 100
print(weighted_total_avg)
# 输出:50.0(本次数据巧合下与算术平均结果一致)

也可以基于分组结果计算加权平均:

grouped = df.groupby('System')['DevTool']
# 统计每个分组的DevTool总和与记录数
group_stats = grouped.agg(['sum', 'count'])
# 加权平均 = 总sum / 总count *100
weighted_total_avg = (group_stats['sum'].sum() / group_stats['count'].sum()) * 100
print(weighted_total_avg)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:51:35