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

Pandas如何按指定列分组计算另一列的分组平均值

问题根源

你的代码有两个核心错误:

  1. 参数传反:需求是按Feature1分组计算Feature2的均值,但你调用函数时把分组字段传成了Feature2,要计算均值的字段传成了Feature1,分组逻辑完全颠倒
  2. 索引取值错误:分组后均值结果的索引是分组列的取值(即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.4
  • Feature1取值为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:09:20