gpt4 book ai didi

python - Pandas:使用 timedelta 合并两个数据帧

转载 作者:行者123 更新时间:2023-12-02 01:26:15 26 4
gpt4 key购买 nike

我正在尝试对具有“ID”和“日期”列的两个大型数据帧执行内部合并。每个示例如下所示:

df1

    ID      Date
0 RHD78 2022-08-05
1 RHD78 2022-08-06
2 RHD78 2022-08-09
3 RHD78 2022-08-11
4 RHD78 2022-08-12
5 RHD78 2022-08-14
6 RHD78 2022-08-15
7 RHD78 2022-08-19
8 BDW56 2022-03-15
9 BDW56 2022-03-16
10 BDW56 2022-03-17
11 BDW56 2022-03-22
12 BDW56 2022-03-23
13 BDW56 2022-03-27
14 BDW56 2022-03-29
15 BDW56 2022-03-30

df2

    ID      Date
0 RHD78 2022-08-12
1 BDW56 2022-03-23

如果我使用代码 df_result = pd.merge(df1, df2, how = 'inner', on='Date') 然后我会得到两个相交的数据点。然而,我正在努力引入一个时间增量,以便生成的数据帧还包含相交日期前后 4 天的数据,如下所示:

df_期望

    ID      Date
0 RHD78 8/9/2022
1 RHD78 8/11/2022
2 RHD78 8/12/2022
3 RHD78 8/14/2022
4 RHD78 8/15/2022
5 BDW56 3/22/2022
6 BDW56 3/23/2022
7 BDW56 3/27/2022

我尝试研究使用 merge_asof() 函数,但我的理解是它只获取最接近日期的值,而不是在特定日期范围内。我正在学习 pandas 和 python,因此如果有人可以帮助我解决这个问题并提供 merge_asof() 的简化解释,我将不胜感激。

最佳答案

使用df作为第一个数据帧,使用df2作为第二个数据帧,我遵循与this answer中相同的过程。 ,即将它们交叉合并在一起,然后在合并发生后进行过滤。交叉合并只是全面合并,它将每个数据帧中的每个行对组合在一起。如果您的两个数据帧非常大,这可能不适用。

merge = df2.merge(df,how='cross')
merge['timedelta'] = pd.to_datetime(merge['Date_x']) - \
pd.to_datetime(merge['Date_y'])
merge_filt = merge.loc[merge['timedelta'].apply(lambda x: x.days).abs()<=4]


print(merge_filt)
Out[43]:
ID_x Date_x ID_y Date_y timedelta
2 RHD78 2022-08-12 RHD78 2022-08-09 3 days
3 RHD78 2022-08-12 RHD78 2022-08-11 1 days
4 RHD78 2022-08-12 RHD78 2022-08-12 0 days
5 RHD78 2022-08-12 RHD78 2022-08-14 -2 days
6 RHD78 2022-08-12 RHD78 2022-08-15 -3 days
27 BDW56 2022-03-23 BDW56 2022-03-22 1 days
28 BDW56 2022-03-23 BDW56 2022-03-23 0 days
29 BDW56 2022-03-23 BDW56 2022-03-27 -4 days

关于python - Pandas:使用 timedelta 合并两个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74567688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com