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

如何在Python中按ID计算DataFrame内合同的日期差值?

解决方案

要实现按用户标识符计算合同间的日期差,用Pandas可以按以下步骤操作:

步骤1:准备数据并转换日期格式

首先确保你的日期列是datetime类型,否则无法正确计算时间差。先构造示例数据(你可以替换成自己的DataFrame):

import pandas as pd

# 示例DataFrame,包含用户标识和合同日期
df = pd.DataFrame({
    '用户标识': ['A', 'A', 'A', 'B', 'B', 'C', 'D', 'D', 'D', 'D'],
    '合同日期': ['2023-01-01', '2023-03-15', '2023-06-20', 
              '2022-11-05', '2023-02-20', '2023-04-10',
              '2021-09-01', '2022-01-15', '2022-05-30', '2023-01-05']
})

# 将字符串格式的日期转换为datetime类型
df['合同日期'] = pd.to_datetime(df['合同日期'])

步骤2:分组计算合同日期差

按用户标识分组,先对每组内的合同日期排序(避免原数据日期无序导致差值错误),再用diff()计算相邻合同的日期差:

# 添加"合同间隔天数"列,计算同一用户相邻合同的日期差(单位:天)
df['合同间隔天数'] = df.groupby('用户标识')['合同日期'].transform(
    lambda x: x.sort_values().diff().dt.days
)

步骤3:处理初始合同的空值

每个用户的第一份合同没有前序合同,差值会是NaN,可以根据需求填充为0或保留NaN:

# 可选:将第一份合同的间隔天数填充为0
df['合同间隔天数'] = df['合同间隔天数'].fillna(0)

最终结果示例

运行上述代码后,DataFrame会新增一列显示合同间隔天数:

用户标识合同日期合同间隔天数
A2023-01-010.0
A2023-03-1573.0
A2023-06-2097.0
B2022-11-050.0
B2023-02-20107.0
C2023-04-100.0
D2021-09-010.0
D2022-01-15136.0
D2022-05-30135.0
D2023-01-05220.0

常见错误排查

  • 日期格式错误:如果日期列不是datetime类型,diff()会失效,务必先用pd.to_datetime()转换。
  • 未分组内排序:如果原数据中同一用户的合同日期是乱序的,直接计算差值会得到错误结果,必须先对每组内的日期排序。
  • 使用apply而非transform:apply返回的是分组后的结果,无法直接与原DataFrame的行对齐,必须用transform保证结果匹配原表结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:55:19