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

Pandas:固定间隔差值计算适配可变间隔,无足够记录时使用最早记录

解决客户CAV值差值计算的问题

嘿,我来帮你搞定这个需求!你原来用的df.groupby('Client')['CAV'].diff(-5)只能处理存在6个月前记录的情况,没有对应记录时就返回NaN,而我们需要用客户最早的CAV值来补全计算,下面是具体的解决步骤:

步骤1:确保数据排序正确

首先要保证每个客户的记录是按月份降序排列的(你的原始数据已经是这样,但显式排序能避免后续出错):

df = df.sort_values(['Client', 'Month'], ascending=[True, False])

步骤2:计算目标差值

我们需要对每个客户分组后,先获取6个月前的CAV值(用shift(-5)),当没有对应记录时,用该客户最早的CAV值(组内最后一条记录的CAV)填充,再用当前CAV减去这个值得到差值:

df['CAV_diff'] = df.groupby('Client')['CAV'].apply(
    lambda x: x - x.shift(-5).fillna(x.iloc[-1])
)

代码解释

  • x.shift(-5):将当前客户组的CAV列向后偏移5行,对应“6个月前”的记录(比如当前行是最新月份,往后数5行就是间隔6个月的记录)
  • .fillna(x.iloc[-1]):当偏移后没有对应值(即记录不足6个月)时,用该客户最早的CAV值(组内最后一行的CAV)填充
  • 最终用当前CAV值减去处理后的偏移值,得到我们需要的差值

验证结果

运行这段代码后,你就能得到完全符合期望的结果:

ClientMonthCAVCAV_diff
A2021-093025
A2021-082010
A2021-07100
A2021-065-5
A2021-05100
A2021-045-5
A2021-03100
B2021-085020
B2021-0710-20
B2021-06300

内容的提问来源于stack exchange,提问作者Jenny Jing Yu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 03:02:39