如果日期连续,如何合并日期框架?

问题描述 投票:1回答:1

我现在去看python和pandas。我有以下日期框架。如果要连续两天,我想将开始日期和结束日期结合起来。

data = {"Project":["A","A","A",'A',"B","B"], "Start":[dt.datetime(2020,1,1),dt.datetime(2020,1,16),dt.datetime(2020,1,31),dt.datetime(2020,7,1),dt.datetime(2020,1,31),dt.datetime(2020,2,16)],"End":[dt.datetime(2020,1,15),dt.datetime(2020,1,30),dt.datetime(2020,2,15),dt.datetime(2020,7,15),dt.datetime(2020,2,15),dt.datetime(2020,2,20)]}
df = pd.DataFrame(data)


    Project Start       End
0   A       2020-01-01  2020-01-15
1   A       2020-01-16  2020-01-30
2   A       2020-01-31  2020-02-15
3   A       2020-07-01  2020-07-15
4   B       2020-01-31  2020-02-15
5   B       2020-02-16  2020-02-20

以及我的预期结果:

    Project Start       End
0   A       2020-01-01  2020-02-15
1   A       2020-07-01  2020-07-15
2   B       2020-01-31  2020-02-20

如果结束的第二天是另一个开始,我想将两行合并。

有任何熊猫函数可以做到这一点吗?

非常感谢!

python pandas datetime
1个回答
2
投票
使用groupbyshift创建遮罩,然后直接分配值和drop_duplicates

mask = df.groupby("Project").apply(lambda d: (d["Start"].shift(-1)-d["End"]).dt.days<=1).reset_index(drop=True) df.loc[mask, "End"]= df["End"].shift(-1) print (df.drop_duplicates(subset=["Project","End"],keep="first")) Project Start End 0 A 2020-01-01 2020-01-30 2 A 2020-05-01 2020-05-15 3 A 2020-07-01 2020-07-15 4 B 2020-02-01 2020-02-20

© www.soinside.com 2019 - 2024. All rights reserved.