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

如何在Pandas中按客户ID计算近30天DaysLate滚动均值

按客户ID计算近30天DaysLate滚动均值的实现

直接通过分组结合时间窗口滚动即可实现,步骤如下:

  1. 先确保数据按客户ID和发票日期排序(时间窗口滚动依赖有序的时间序列)
  2. 按客户分组后,应用30天时间窗口的滚动均值计算

完整代码:

# 按客户ID和发票日期排序,保证每个客户的记录时间有序
df = df.sort_values(['customerID', 'InvoiceDate'])

# 分组计算每个客户近30天的DaysLate滚动均值
df['CustomerDaysLate_30days'] = df.groupby('customerID').rolling(
    window='30d', 
    on='InvoiceDate',
    min_periods=1  # 可选参数:允许窗口最少1条记录就计算均值,避免NaN
)['DaysLate'].mean().reset_index(level=0, drop=True)

代码说明:

  • sort_values(['customerID', 'InvoiceDate']):必须先排序,否则每个客户的时间窗口计算会混乱,Pandas的时间窗口滚动默认要求序列是时间有序的。
  • groupby('customerID'):将数据按客户拆分,每个客户独立计算自己的滚动均值,不会和其他客户的记录混淆。
  • rolling(window='30d', on='InvoiceDate'):指定滚动窗口为30天,基于InvoiceDate列的时间划定窗口范围,每个记录的窗口是该记录日期往前推30天内的所有同客户记录。
  • reset_index(level=0, drop=True):去掉分组产生的customerID索引层,让计算结果的索引和原DataFrame对齐,直接赋值到新列中。
  • min_periods=1:可选设置,如果不需要允许单条记录计算均值,可以去掉这个参数,此时若客户在30天窗口内无记录,结果会是NaN。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:51:56