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

如何用Pandas实现同ID下相邻日期差值计算(替代遍历循环)

解决方案:用Pandas分组+移位操作实现日期差计算

当然可以!完全不需要写for循环,Pandas的分组(groupby)和移位(shift)组合就能轻松搞定这个需求,步骤如下:

完整代码实现

import pandas as pd
import numpy as np

# 初始化数据集
d = {'id': [1, 2, 2, 2], 'date': [np.datetime64('2019-07-01'), np.datetime64('2019-07-02'), np.datetime64('2019-07-06'), np.datetime64('2019-07-19')]}
df = pd.DataFrame(data=d)

# 新增diff列:计算同id下当前行与下一行的日期差
df['diff'] = df.groupby('id')['date'].shift(-1) - df['date']
# 将Timedelta类型转换为天数数值
df['diff'] = df['diff'].dt.days

代码解释

  • 按id分组:df.groupby('id')['date']确保我们只在同一个id的范围内计算日期差,不会跨id计算。
  • 移位获取下一行日期:.shift(-1)会把每个分组内的日期列向上偏移一位,这样当前行就能拿到同组下一行的日期;每个分组的最后一行因为没有下一行,会得到NaN。
  • 计算日期差并转换单位:用移位后的日期减去当前行日期,得到的是Timedelta类型(带时间单位的差值),再通过.dt.days提取天数数值,就得到了你需要的结果。

最终结果

运行代码后,df会生成你期望的输出:

iddatediff
12019-07-01NaN
22019-07-024.0
22019-07-0613.0
22019-07-19NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:06:49