如何检测Pandas DataFrame中首日期后每对日期是否连续
验证Pandas DataFrame中相邻日期对是否连续(间隔1天)
基础场景:无分组,全局检查相邻日期
步骤:
- 将日期列转换为
datetime类型(确保后续差值计算准确) - 计算相邻日期的差值
- 对比差值是否等于1天(
pd.Timedelta(days=1))
示例代码:
import pandas as pd # 构建示例DataFrame data = {'日期': ['2023-01-01', '2023-01-02', '2023-01-04', '2023-01-05', '2023-01-06']} df = pd.DataFrame(data) # 转换日期类型 df['日期'] = pd.to_datetime(df['日期']) # 计算相邻日期是否连续 df['是否连续'] = df['日期'].diff() == pd.Timedelta(days=1) print(df)
输出结果:
日期 是否连续 0 2023-01-01 NaN 1 2023-01-02 True 2 2023-01-04 False 3 2023-01-05 True 4 2023-01-06 True
注:第一行结果为
NaN,因为首个日期没有前序日期可对比,符合“首个日期之后的相邻对”的检查需求
进阶场景:按分组检查组内相邻日期
如果数据按类别分组(如用户ID、部门等),需要每个组内独立检查相邻日期,可按以下方式处理:
步骤:
- 转换日期列为
datetime类型 - 按分组列+日期列排序(确保组内日期顺序正确)
- 分组计算日期差值并判断是否连续
示例代码:
import pandas as pd # 构建带分组的示例DataFrame data = { '日期': ['2023-01-01', '2023-01-04', '2023-01-02', '2023-01-06', '2023-01-05'], '用户ID': ['A', 'A', 'A', 'B', 'B'] } df = pd.DataFrame(data) # 转换日期类型 df['日期'] = pd.to_datetime(df['日期']) # 按分组列和日期排序,确保组内日期顺序正确 df = df.sort_values(['用户ID', '日期']).reset_index(drop=True) # 分组计算组内相邻日期是否连续 df['组内是否连续'] = df.groupby('用户ID')['日期'].diff() == pd.Timedelta(days=1) print(df)
输出结果:
日期 用户ID 组内是否连续 0 2023-01-01 A NaN 1 2023-01-02 A True 2 2023-01-04 A False 3 2023-01-05 B NaN 4 2023-01-06 B True
关键说明
- 必须确保日期列是
datetime类型,否则diff()无法正确计算时间间隔 - 如果分组后日期乱序,一定要先排序,否则相邻差值的逻辑会出错
- 首个日期对应的结果为
NaN,代表无需检查;后续每行结果对应当前日期与前一行日期的连续性
内容的提问来源于stack exchange,提问作者Yoi2hot4ya
相关产品推荐
相关产品推荐

