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

如何使用Pandas解决日期的Gap and Island问题

Pandas Gap and Island 问题解决方案

针对你需要识别同一分组内日期间隔超过1天则开启新岛屿的需求,可以按以下步骤实现:

步骤1:确保数据按分组和日期排序

先对数据集按group和date排序,保证后续计算相邻日期差的准确性:

df = df.sort_values(['group', 'date']).reset_index(drop=True)

步骤2:计算相邻日期的间隔

按分组计算当前行与上一行的日期差,判断是否超过1天:

# 计算相邻日期差,单位为天
df['date_diff'] = df.groupby('group')['date'].diff().dt.days
# 标记间隔超过1天的位置(分组内首次出现的行也标记为新岛屿起点)
df['is_new_island'] = (df['date_diff'] > 1) | df['date_diff'].isna()

步骤3:生成岛屿ID

对每个分组内的is_new_island进行累加,得到唯一的岛屿标识:

df['island_id'] = df.groupby('group')['is_new_island'].cumsum()

完整示例代码

整合所有步骤,运行后即可得到带岛屿ID的结果:

import pandas as pd
import numpy as np

# 你的原始数据生成代码
np.random.seed(1066)
dates = pd.date_range(start='2010-01-01', end='2010-12-31', freq='D')
df = pd.DataFrame({'date': dates,
                   'group': 'A',
                   'value': np.random.randint(0, 100, size=len(dates))
                  }).append(pd.DataFrame({'date': dates,
                                          'group': 'B',
                                          'value': np.random.randint(0, 100, size=len(dates))
                  })).append(pd.DataFrame({'date': dates,
                                           'group': 'C',
                                           'value': np.random.randint(0, 100, size=len(dates))
                                          })).reset_index(drop=True)
length = df.shape[0]
droplist = np.unique(np.sort(np.random.randint(0, length, size=100))).tolist()
df = df.drop(droplist).reset_index(drop=True)

# 解决Gap and Island的核心代码
df = df.sort_values(['group', 'date']).reset_index(drop=True)
df['date_diff'] = df.groupby('group')['date'].diff().dt.days
df['is_new_island'] = (df['date_diff'] > 1) | df['date_diff'].isna()
df['island_id'] = df.groupby('group')['is_new_island'].cumsum()

# 查看结果示例
print(df[['date', 'group', 'value', 'island_id']].head(10))

结果说明

  • island_id为同一分组内的岛屿编号,编号相同的行属于同一个连续日期岛屿
  • 当某行的date_diff大于1天时,会触发新的island_id
  • 每个分组的第一行自动作为新岛屿的起点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:55:17