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

如何在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个月这类多列均值时过于繁琐,需要一种仅输入回溯列数就能自动计算的高效方法。

解决方案

核心思路

  1. 筛选出所有收入相关列(排除customer_id),并按月份编号排序,保证列顺序从早到晚;
  2. 编写通用函数,根据输入的回溯列数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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:01:27