如何在Pandas中按指定回溯列数计算客户收入均值?
高效计算指定回溯列数的收入均值
原始数据
customer_id revenue_m7 revenue_m8 revenue_m9 revenue_m10 1 1234 1231 1256 1239 2 5678 3425 3255 2345
需求
- 计算每位客户最近2个月(
revenue_m9、revenue_m10)的收入均值; - 计算每位客户最近4个月(
revenue_m7至revenue_m10)的收入均值。
现有问题
当前硬编码列名的方式(手动相加再除以数量)在计算12个月这类多列均值时过于繁琐,需要一种仅输入回溯列数就能自动计算的高效方法。
解决方案
核心思路
- 筛选出所有收入相关列(排除
customer_id),并按月份编号排序,保证列顺序从早到晚; - 编写通用函数,根据输入的回溯列数N,自动取最后N列计算每行均值。
代码实现
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'customer_id': [1, 2], 'revenue_m7': [1234, 5678], 'revenue_m8': [1231, 3425], 'revenue_m9': [1256, 3255], 'revenue_m10': [1239, 2345] }) # 筛选并排序收入列:按月份数字排序(m7 < m8 < m9 < m10) revenue_cols = sorted( [col for col in df.columns if col.startswith('revenue_m')], key=lambda x: int(x.split('_')[-1][1:]) # 提取月份数字(如m7取7) ) # 通用均值计算函数 def get_recent_mean(df, n_months): # 获取最近n_months列的收入数据 target_cols = revenue_cols[-n_months:] # 计算每行均值 return df[target_cols].mean(axis=1) # 生成结果列 df['revenue_mean_2m'] = get_recent_mean(df, 2) df['revenue_mean_4m'] = get_recent_mean(df, 4) print(df)
优势
- 无需硬编码列名,新增月份列(如
revenue_m11)后,只要命名规范,函数会自动识别排序; - 支持任意回溯列数,输入12就能直接计算过去12个月的均值,复用性极强;
- 避免手动加减列名导致的拼写错误,计算更可靠。
最终输出
customer_id revenue_m7 revenue_m8 revenue_m9 revenue_m10 revenue_mean_2m revenue_mean_4m 0 1 1234 1231 1256 1239 1247.5 1240.0 1 2 5678 3425 3255 2345 2800.0 3675.75
(注:原示例中revenue_mean_2m第一行数值有误,正确计算应为(1256+1239)/2=1247.5)
内容的提问来源于stack exchange,提问作者The Great
相关产品推荐
相关产品推荐

