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

如何用Python Pandas按另一列的区间计算列的平均值

Pandas按数值区间计算对应列平均值的高效实现

核心思路

无需编写大量分支判断,利用Pandas的区间分组与映射功能,一次性完成批量区间的平均值计算与匹配。

具体实现步骤

假设你的DataFrame名为df,A列为区间依据列,B列为需计算平均值的列,以下以步长5为例演示:

1. 生成等步长区间

先获取A列最大值,再生成从0开始、步长为5的连续区间:

step = 5
max_A = df['A'].max()
# 生成包含最大值的完整区间序列
bins = range(0, max_A + step, step)

2. 标记每行数据的所属区间

用pd.cut()为A列数据打上对应的区间标签:

df['A_interval'] = pd.cut(df['A'], bins=bins, include_lowest=True)
  • include_lowest=True确保0值被正确归入第一个区间[0,5)。

3. 计算区间平均值并映射回原数据

通过groupby().transform()直接将分组均值填充到对应行,新增列存储结果:

df['B_mean_by_interval'] = df.groupby('A_interval')['B'].transform('mean')
  • transform()会保持原DataFrame的行数结构,自动将对应区间的平均值匹配到每一行。

完整代码示例

import pandas as pd

# 替换为你的真实数据
data = {
    'A': [3, 7, 12, 25, 30, 42, 20000],
    'B': [10, 20, 30, 40, 50, 60, 70]
}
df = pd.DataFrame(data)

# 设置区间步长
step = 5
max_A = df['A'].max()
bins = range(0, max_A + step, step)

# 执行区间标记与平均值计算
df['A_interval'] = pd.cut(df['A'], bins=bins, include_lowest=True)
df['B_mean_by_interval'] = df.groupby('A_interval')['B'].transform('mean')

print(df)

补充说明

  • 若需要调整区间开闭规则,可修改pd.cut()的right参数,默认right=True对应左闭右开区间,符合你需求的[0,20)、[20,40)格式。
  • 若A列存在空值,pd.cut()会将其标记为NaN,对应平均值也为NaN,可根据需求用df.dropna()或fillna()处理。

内容的提问来源于stack exchange,提问作者Gustavo De Leon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:30:50