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(使用前将#替换为@)