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
相关产品推荐
相关产品推荐

