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

按Work分组且日期间隔不超3天的Pandas数据处理需求

解决Pandas中按Work分组且组内日期间隔≤3天的需求

你之前的方法问题在于直接对整个Work分组,没有考虑同一Work下的日期分段——比如Work1包含2021年和2022年两段间隔极大的记录,需要拆成两个独立分组。下面是具体实现步骤:

步骤1:预处理日期列

首先要把字符串格式的Date转为Pandas可识别的datetime类型,否则无法计算日期差:

import pandas as pd

# 初始化数据集
df = pd.DataFrame([['Work1','Task1','08-12-2021'], ['Work1','Task2','09-12-2021'], ['Work1','Task3','10-12-2021'],['Work2','Task1','20-12-2021'],['Work2','Task2','20-12-2021'],['Work2','Task3','21-12-2021'],['Work1','Task1','10-12-2022'],['Work1','Task2','11-12-2022']], columns=['Work', 'Task','Date'])

# 转换日期格式(匹配日-月-年的输入格式)
df['Date'] = pd.to_datetime(df['Date'], format='%d-%m-%Y')

步骤2:生成Work内的分组标识

按Work分组后,对每组记录按日期排序,计算相邻日期的差值,当差值超过3天时标记为新分组起点,最终生成每个记录的组ID:

# 按Work+Date排序,确保日期顺序正确
df_sorted = df.sort_values(['Work', 'Date']).reset_index(drop=True)

# 按Work分组计算相邻日期的间隔天数
df_sorted['date_diff'] = df_sorted.groupby('Work')['Date'].diff().dt.days

# 标记新分组:组内第一条记录或间隔超3天的记录,标记为新分组起点
df_sorted['new_group'] = (df_sorted['date_diff'] > 3) | df_sorted['date_diff'].isna()

# 累加标记值,生成每个Work内的分组ID
df_sorted['group_id'] = df_sorted.groupby('Work')['new_group'].cumsum()

步骤3:聚合得到目标结果

按Work和group_id分组,聚合出每组的起止日期、首尾Task:

# 聚合计算所需字段
result = df_sorted.groupby(['Work', 'group_id']).agg(
    start_date=('Date', 'min'),
    end_date=('Date', 'max'),
    start_task=('Task', 'first'),
    end_task=('Task', 'last')
).reset_index()

# 生成友好的分组标识(如Work1_1)
result['group_label'] = result['Work'] + '_' + result['group_id'].astype(str)

# 整理最终输出列顺序
final_result = result[['group_label', 'start_date', 'end_date', 'start_task', 'end_task']]
print(final_result)

运行后输出结果:

group_label start_date   end_date start_task end_task
0    Work1_1 2021-12-08 2021-12-10      Task1    Task3
1    Work1_2 2022-12-10 2022-12-11      Task1    Task2
2    Work2_1 2021-12-20 2021-12-21      Task1    Task3

该结果完全满足需求:同一Work下间隔≤3天的记录被归为独立分组,每个分组包含专属标识、起止日期及首尾Task。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:50:17