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

Pandas按ID分组跨行计算不同日期列的预订间隔天数

pandas实现同ID相邻预订间隔计算

核心实现步骤

  • 首先将日期字符串转为标准datetime格式,注意你的日期是日/月/年格式,解析时要指定dayfirst=True避免解析错误
  • 分组前先按ID、到达日期排序,保证组内记录的时间顺序正确,避免原始数据乱序导致计算错误
  • 分组后用shift(1)取同ID上一条记录的离店日期,和当前行的到达日期做差,提取天数值即可
  • 计算全程保留原始表的行顺序,和你给出的期望输出结构完全匹配
import pandas as pd

# 1. 转换日期格式
df_corp['arrival_date'] = pd.to_datetime(df_corp['arrival_date'], dayfirst=True)
df_corp['leaving_date'] = pd.to_datetime(df_corp['leaving_date'], dayfirst=True)

# 2. 分组取同ID上一次的离店日期
df_corp['prev_leaving'] = (
    df_corp.sort_values(['ID', 'arrival_date'])
    .groupby('ID')['leaving_date']
    .shift(1)
)

# 3. 计算间隔天数,删除临时列
df_corp['time_between'] = (df_corp['arrival_date'] - df_corp['prev_leaving']).dt.days
df_corp = df_corp.drop(columns='prev_leaving')

结果说明

运行后输出的time_between列完全匹配你的预期:

  • 每个ID最早的一条预订没有前序记录,值为NaN
  • ID=1的第二次预订(12/02/20到达)与前次离店间隔7天
  • ID=1的第三次预订(07/03/20到达)与前次离店间隔15天
  • ID=2的第二次预订(10/03/20到达)与前次离店间隔3天

如果不需要保留原始行顺序,也可以先对全表按['ID', 'arrival_date']排序后再做分组移位计算,数值结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:45:32