我有两个数据框 -
ID Currency_a Amount_a Date_a
1 CAD 100 12-Jan
2 CAD 200 12-Feb
3 USD 200 15-Aug
4 USD 200 12-Jan
5 EUR 200 12-Feb
ID Currency_b Amount_b Date_b
6 CAD 500 25-Jan
7 CAD 600 13-Feb
8 USD 200 15-Aug
9 USD 400 20-Jan
10 EUR 200 12-Feb
任务是(ID,ID)
从 2 个各自的数据帧中创建一对,如果 -
货币是一样的
Amount_a + Amount_b > 600
Date_a 和 Date_b 之间的时间段小于 10 天
所以在这种情况下的输出应该是
(2,7), (4,9)
我正在使用(但它似乎不起作用:()-
a.merge(b, on='Currency).query('Amount_a + Amount_b > 600' and 'abs((Date_a - Date_b).dt.days) > 10').filter(like='ID').values.tolist()
尝试:
df1['Date_a'] = pd.to_datetime(df1['Date_a'], format='%d-%b')
df2['Date_b'] = pd.to_datetime(df2['Date_b'], format='%d-%b')
df_out = pd.merge_asof(df1.sort_values('Date_a'),
df2.sort_values('Date_b'),
left_on='Date_a',
right_on='Date_b',
left_by='Currency_a',
right_by='Currency_b',
tolerance=pd.Timedelta(days=10),
direction='nearest')
df_out.query('Amount_a+Amount_b >= 600')[['ID_x','ID_y']].apply(tuple, axis=1).tolist()
输出:
[(4.0, 9.0), (2.0, 7.0)]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句