如何用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
相关产品推荐
相关产品推荐

