使用合并功能在两个数据帧上运行多个条件以创建对

拉比·纳齐姆

我有两个数据框 -

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章