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
得到的结果如下:
| System | DevTool Ratio |
|---|---|
| A | 66.67 |
| B | 50.00 |
| C | 00.00 |
| D | 100.00 |
| E | 33.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
相关产品推荐
相关产品推荐

