【发布时间】:2022-12-09 01:40:26
【问题描述】:
我有一个非常复杂的问题,找不到我可以应用的答案。在包含工作、任务和日期(字符串、字符串、日期)的数据框中,我想根据工作进行分组,但只有当日期彼此相隔 3 天以内时:
| Work | Task | Date |
|---|---|---|
| Work 1 | Task 1 | 08-12-2021 |
| Work 1 | Task 2 | 09-12-2021 |
| Work 1 | Task 3 | 10-12-2021 |
| Work 2 | Task 1 | 20-12-2021 |
| Work 2 | Task 2 | 20-12-2021 |
| Work 2 | Task 3 | 21-12-2021 |
| Work 1 | Task 1 | 10-12-2021 |
| Work 1 | Task 2 | 11-12-2021 |
数据集:
In [1]: 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'])
我尝试了什么:我计算了一个包含分组工作、工作开始日期(聚合最小日期)、工作完成日期(聚合最大日期)、第一项任务、最新任务的数据框。
df2 = df.groupby(by=('Work')).agg(Max=('Date','max'), Min=('Date','min')).reset_index()
df2["Finish_Date"] = df2.merge(df, left_on=["Work", "Max"], right_on=["Work", "Date"])['Task']
df2["Start_Date"] = df2.merge(df, left_on=["Work", "Min"], right_on=["Work", "Date"])['Task']
我得到什么:
| Work | Start Date | Finish Date | First Task | Last Task |
|---|---|---|---|---|
| Work 1 | 08-12-2021 | 11-12-2022 | Task 1 | Task 2 |
| Work 2 | 20-12-2021 | 21-12-2021 | Task 1 | task 3 |
问题是工作不能持续超过 3 天,我想根据工作分组,但每个分组不超过 3 天。我尝试用作品+开始日期来创建一个新的列来区分不同的作品,但没有成功。我想要的是:
| Work | Start Date | Finish Date | First Task | Last Task |
|---|---|---|---|---|
| Work 1 - 08-12-2021 | 08-12-2021 | 10-12-2022 | Task 1 | Task 3 |
| Work 2 - 20-12-2021 | 20-12-2021 | 21-12-2021 | Task 1 | task 3 |
| Work 1 - 10-12-2022 | 10-12-2022 | 11-12-2022 | Task 1 | task 3 |
谢谢
【问题讨论】:
-
为什么
Last Tasktask_3而不是task_2因为这是11-12-2021上的最后一个任务?