合并 pandas 数据框中两列的连续日期

2024-05-02

ID           Order_ID     statr_date            end_date                 Product    Sub_Product 
746              001      08-Oct-2019 0:00:00   *16-Nov-2019 0:00:00*     LPP       Abc
746              002      10-Oct-2019 0:00:00   02-Sep-2020 0:00:00       LPP       Abc
746              003      10-Oct-2019 0:00:00   11-Sep-2020 0:00:00       LPP       Abc
746              004      10-Oct-2019 0:00:00   08-Jan-2021 0:00:00       LPP       Abc
746              005    *16-Nov-2019 0:00:00*   17-Dec-2019 0:00:00       LPP       Abc

在上面的数据集中,我想搜索连续日期,例如从结束日期为 2019 年 11 月 16 日的第一行开始,查找按开始日期计算的连续日期并将它们组合起来。最终输出如下所示:

  ID         Order_ID     statr_date            end_date                 Product    Sub_Product 
746              001      08-Oct-2019 0:00:00   17-Dec-2019 0:00:00       LPP       Abc
746              002      10-Oct-2019 0:00:00   02-Sep-2020 0:00:00       LPP       Abc
746              003      10-Oct-2019 0:00:00   11-Sep-2020 0:00:00       LPP       Abc
746              004      10-Oct-2019 0:00:00   08-Jan-2021 0:00:00       LPP       Abc

我该如何去做呢?


您还可以尝试使用 for 循环和df.loc[]

for start in df.statr_date:
    for end in df.end_date:
        if start==end:
            df.loc[df[df.end_date.eq(end)].index, 'end_date'] = df.loc[df[df.statr_date.eq(start)].index, 'end_date']
            df = df.drop(df[df.statr_date.eq(start)].index)


Output:
    ID  Order_ID           statr_date             end_date Product Sub_Product
0  746         1  08-Oct-2019 0:00:00  17-Dec-2019 0:00:00     LPP         Abc
1  746         2  10-Oct-2019 0:00:00  02-Sep-2020 0:00:00     LPP         Abc
2  746         3  10-Oct-2019 0:00:00  11-Sep-2020 0:00:00     LPP         Abc
3  746         4  10-Oct-2019 0:00:00  08-Jan-2021 0:00:00     LPP         Abc

编辑: 这种具有多个 for 循环的解决方案对于大数据来说性能不太友好

# Input Data
   ID  Order_ID           statr_date             end_date Product Sub_Product
0  746         1  08-Oct-2019 0:00:00  16-Nov-2019 0:00:00     LPP         Abc
1  746         2  10-Oct-2019 0:00:00  02-Sep-2020 0:00:00     LPP         Abc
2  746         3  10-Oct-2019 0:00:00  11-Sep-2020 0:00:00     LPP         Abc
3  746         4  10-Oct-2019 0:00:00  08-Jan-2021 0:00:00     LPP         Abc
4  746         5  16-Nov-2019 0:00:00  17-Dec-2019 0:00:00     LPP         Abc
5  756         6  11-Oct-2019 0:00:00  05-Sep-2020 0:00:00     LBB         Abc
6  756         7  10-Nov-2019 0:00:00  11-Dec-2020 0:00:00     LBB         Abc
7  766         8  22-Oct-2019 0:00:00  19-Nov-2019 0:00:00     LBB         Abc
8  766         9  19-Nov-2019 0:00:00  27-Dec-2019 0:00:00     LBB         Agn


g = df.groupby(['ID','Product', 'Sub_Product'])

dfs = []
for group in g.groups:
    df1 = g.get_group(group)
    for start in df1.statr_date:
        for end in df1.end_date:
            if start==end:
                df1.loc[df1[df1.end_date.eq(end)].index, 'end_date'] = df1.loc[df1[df1.statr_date.eq(start)].index, 'end_date']
                df1 = df1.drop(df1[df1.statr_date.eq(start)].index)
    
    dfs.append(df1)                

out = pd.concat(dfs).reset_index()
out

Output:

   index   ID  Order_ID           statr_date             end_date Product  \
0      0  746         1  08-Oct-2019 0:00:00  17-Dec-2019 0:00:00     LPP   
1      1  746         2  10-Oct-2019 0:00:00  02-Sep-2020 0:00:00     LPP   
2      2  746         3  10-Oct-2019 0:00:00  11-Sep-2020 0:00:00     LPP   
3      3  746         4  10-Oct-2019 0:00:00  08-Jan-2021 0:00:00     LPP   
4      5  756         6  11-Oct-2019 0:00:00  05-Sep-2020 0:00:00     LBB   
5      6  756         7  10-Nov-2019 0:00:00  11-Dec-2020 0:00:00     LBB   
6      7  766         8  22-Oct-2019 0:00:00  19-Nov-2019 0:00:00     LBB   
7      8  766         9  19-Nov-2019 0:00:00  27-Dec-2019 0:00:00     LBB   
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

合并 pandas 数据框中两列的连续日期 的相关文章