Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用merge函数在两个数据帧上运行多个条件以创建对_Python_Pandas_Dataframe_Conditional Statements - Fatal编程技术网

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)]