Pandas如何按指定列分组计算另一列的分组平均值
问题根源
你的代码有两个核心错误:
- 参数传反:需求是按
Feature1分组计算Feature2的均值,但你调用函数时把分组字段传成了Feature2,要计算均值的字段传成了Feature1,分组逻辑完全颠倒 - 索引取值错误:分组后均值结果的索引是分组列的取值(即
X、Y),你代码里取avgs.loc['1']、avgs.loc['0'],根本匹配不到对应索引,自然运行异常。
正确实现
构造测试数据
先复现你给出的示例DataFrame:
import pandas as pd df = pd.DataFrame({ 'Feature1': ['X', 'X', 'Y', 'Y', 'Y', 'X', 'Y', 'X', 'Y', 'X'], 'Feature2': [0, 0, 0, 1, 1, 1, 0, 1, 1, 0] })
单独计算两组均值
直接用groupby即可得到两个分组的平均值:
# 按Feature1分组,计算Feature2列的均值 mean_res = df.groupby('Feature1')['Feature2'].mean()
运行输出结果:
Feature1 X 0.4 Y 0.6 Name: Feature2, dtype: float64
对应结果:
Feature1取值为X时,Feature2平均值为0.4Feature1取值为Y时,Feature2平均值为0.6
修正自定义差值计算函数
把索引取值逻辑、参数语义调整正确即可:
def diff_of_avg(df, calc_column, groupby_col): grouped = df.groupby(groupby_col) avgs = grouped[calc_column].mean() # 分组索引是X/Y,对应取两个分组的均值做差 return avgs.loc['Y'] - avgs.loc['X'] # 正确传参:计算列是Feature2,分组列是Feature1 diff = diff_of_avg(df, calc_column='Feature2', groupby_col='Feature1') print(diff) # 输出0.2,即0.6-0.4的差值
传参时务必区分两个字段的作用:
calc_column是你要计算均值的目标列,groupby_col是你用来拆分数据的分组列,不要颠倒顺序。
内容的提问来源于stack exchange,提问作者Programming Noob
相关产品推荐
相关产品推荐

