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

如何在pandas中实现类似Excel AVERAGEIF的条件均值计算功能

问题原因

你原来的代码出错的核心是布尔索引的维度和筛选逻辑不匹配:你生成的df[['Rank A', 'Rank B', 'Rank C']] > 50是一个3列的布尔矩阵,直接用来索引整个DataFrame时,会把所有不满足Rank>50的位置全部置为NaN,最终取XS列计算时全为NaN值,求均值自然返回nan。

正确实现方案(向量化,高性能适配大数据量)

假设你的表结构是Rank A对应XS A、Rank B对应XS B、Rank C对应XS C的配对关系,有两种常用实现方式,完全匹配Excel AVERAGEIF的计算逻辑:

方式1:逐列配对计算(逻辑清晰,适合列数可控的场景)

# 定义配对的列名
rank_cols = ['Rank A', 'Rank B', 'Rank C']
xs_cols = ['XS A', 'XS B', 'XS C']
result = {}

for r_col, x_col in zip(rank_cols, xs_cols):
    # 仅对对应Rank列>50的行计算XS列均值,全程为底层向量化操作,无额外开销
    result[x_col] = df.loc[df[r_col] > 50, x_col].mean()

# 按需转换为Series或DataFrame使用
result_series = pd.Series(result)

方式2:掩码矩阵批量计算(性能更高,适合列数极多的场景)

如果你的列规模很大,可以直接用掩码矩阵批量处理,进一步减少Python层的循环开销:

# 生成Rank列的条件掩码
rank_mask = df[['Rank A', 'Rank B', 'Rank C']] > 50
# 掩码对齐到XS列,不满足条件的位置置为NaN后直接求列均值
xs_mean = df[['XS A', 'XS B', 'XS C']].where(rank_mask).mean()

这种方式全程为C层面的向量化运算,30万行×110列的规模可以毫秒级完成计算,完全满足你循环执行100次的性能要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:45:00