如何在两个数据帧中搜索时间序列数据



我有两个熊猫数据帧df1df2,如下所示:

df1包含按递增时间顺序排列的a类型的所有数据:

type   Date
0  a      1970-01-01
1  a      2008-08-01
2  a      2009-07-24
3  a      2010-09-30
4  a      2011-09-29
5  a      2013-06-11
6  a      2013-12-17
7  a      2015-06-02
8  a      2016-06-14
9  a      2017-06-21
10 a      2018-11-26
11 a      2019-06-03
12 a      2019-12-16

df2,包含按递增时间顺序排列的b类型的所有数据:

type   Date
0  b      2017-11-29
1  b      2018-05-30
2  b      2018-11-26
3  b      2019-06-03
4  b      2019-12-16
5  b      2020-06-18
6  b      2020-12-17
7  b      2021-06-28

如果类型a条目和类型b条目之间的日期差在一年内,则它们被确定为匹配。一个类型的a条目只能与另一个类型b条目匹配,反之亦然。时间效率高,我如何按照以下时间顺序找到匹配对的最大数量?

type1  Date1        type2   Date2
0  a      2017-06-21   b       2017-11-29
1  a      2018-11-26   b       2018-05-30
2  a      2019-06-03   b       2018-11-26
3  a      2019-12-16   b       2019-06-03

使用merge_asof:

df3 = pd.merge_asof(df1.rename(columns={'Date':'Date2', 'type':'type1'}), 
df2.rename(columns={'Date':'Date1', 'type':'type2'}), 
left_on='Date2', 
right_on='Date1', 
direction='nearest', 
allow_exact_matches=False,
tolerance=pd.Timedelta('365 days')).dropna(subset=['Date1'])
print (df3)
type1      Date2 type2      Date1
9      a 2017-06-21     b 2017-11-29
10     a 2018-11-26     b 2018-05-30
11     a 2019-06-03     b 2018-11-26
12     a 2019-12-16     b 2020-06-18

最新更新