Python 使用merge函数在两个数据帧上运行多个条件以创建对
我有两个数据帧-Python 使用merge函数在两个数据帧上运行多个条件以创建对,python,pandas,dataframe,conditional-statements,Python,Pandas,Dataframe,Conditional Statements,我有两个数据帧- 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 任务是从2个相应的数据帧创建一对ID,ID,如果- 货币是一
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
任务是从2个相应的数据帧创建一对ID,ID,如果-
货币是一样的
金额a+金额b>600
日期a和日期b之间的时间段小于10天
所以这种情况下的输出应该是
2,7,4,9
我正在使用,但似乎不起作用:-
a、 mergeb,on='Currency.query'Amount\u a+Amount\u b>600'和'absDate\u a-Date\u b.dt.days>10'。filterlike='ID'。values.tolist
查询不支持dt.days。所以,也许这个:
(df1.merge(df2, left_on='Currency_a', right_on='Currency_b')
.assign(date_diff=lambda x: x.Date_a.sub(x.Date_b).dt.days.abs())
.query('date_diff < 10 & Amount_a + Amount_b > 600')
.filter(like='ID')
.values
)
尝试:
输出:
[(4.0, 9.0), (2.0, 7.0)]
SyntaxError:EOL扫描字符串literal4时,9等于600但不大于600。应该是>=600吗?你做了什么来解决这个问题?
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)]