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

Python如何实现条件均值 按指定列阈值分组计算对应列均值

pandas 按列条件计算另一列均值实现方法

针对你要按年龄阈值分段算平均薪资的需求,给两个最常用的实现方案,按需选就行。


方法1:布尔索引直接筛选(新手友好,逻辑直观)

核心思路就是先通过布尔条件筛出符合年龄要求的行,再直接对薪资列调用均值方法,代码可读性最高,刚上手也不容易写错。

import pandas as pd

# 示例DataFrame,替换成你自己的实际数据即可
df = pd.DataFrame({
    'age': [24, 36, 40, 47, 29, 53, 33],
    'salary': [7500, 16000, 21000, 27000, 14000, 32000, 18000]
    # 剩余两列字段不参与计算,不需要额外处理
})

# 计算40岁以下人群平均薪资,不包含40岁
salary_under_40 = df[df['age'] < 40]['salary'].mean()
# 计算40岁以上人群平均薪资,要包含40岁就把>替换为>=
salary_over_40 = df[df['age'] > 40]['salary'].mean()

小提醒:尽量保持「先筛选行、再取目标列」的写法顺序,避免触发pandas的链式索引警告,后续如果需要修改筛选后的数据也不容易出逻辑bug。默认情况下mean()方法会自动跳过age、salary列中的空值,不需要手动写判空逻辑。


方法2:分箱分组计算(多分段场景更高效)

如果后续你需要加更多年龄分段(比如30以下、30-40、40-50、50以上),不用反复写筛选条件,用分箱+分组统计的方式一次性就能出所有分段的结果,数据量越大效率优势越明显:

# 按年龄阈值切分分箱
df['age_segment'] = pd.cut(
    df['age'],
    bins=[0, 40, float('inf')], # 分段边界,可自行加更多阈值
    labels=['40岁及以下', '40岁以上'] # 对应分段的名称,和bins边界一一对应
)
# 按分组直接计算各段平均薪资
segment_salary_mean = df.groupby('age_segment')['salary'].mean()

避坑提示

  • 不要写for循环逐行判断累加算均值,pandas的内置向量化方法比手写循环快数十倍,数据量过万的时候差距会非常明显
  • 写阈值条件的时候注意边界逻辑:需要包含40岁就用<=/>=,不需要包含就用</>,避免统计口径错了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:48:24