Pandas merge_asof 多个键
Pandas merge_asof on multiple keys
两个df来自不同频率的数据。
df1 :
INNER_CODE TRADEDATE CLOSE_PRICE
0 101000038 2020/12/14 1.2
1 101000187 2020/12/14 2.3
df2 :
INNER_CODE CHANGEDATE TOT_NUMS
0 101000038 2019/11/1 100
1 101000038 2020/12/1 110
2 101000038 2020/12/15 120
3 101000187 2019/11/1 200
4 101000187 2020/11/1 210
5 101000187 2020/12/18 220
我想在 df1.INNER_CODE=df2.INNER_CODE
上合并它们,df2.CHANGEDATE
在 df1.TRADEDATE
之前并且最接近 df1.TRADEDATE
。
My goal result is
INNER_CODE TRADEDATE CLOSE_PRICE TOT_NUMS
0 101000038 2020/12/14 1.2 110
1 101000187 2020/12/14 2.3 210
我需要通过pandas来实现,而不是通过“sql外层应用”。我想到了一个替代方法,通过df1.apply(func)
实现,但是它很耗内存而且太效率低下。是否可以通过类似merge_asof
的pandas来实现?
谢谢。
问题已解决。 pd.merge_asof
可以解决我的问题perfectly.The df1
和df2
需要提前按照TRADEDATE和CHANGEDATE排序
pd.merge_asof(df1,df2,by='INNER_CODE',left_on='TRADEDATE',right_on='CHANGEDATE')
INNER_CODE TRADEDATE CLOSE_PRICE CHANGEDATE TOT_NUMS
0 101000038 2020-12-14 1.2 2020-12-01 110
1 101000187 2020-12-14 2.3 2020-11-01 210
两个df来自不同频率的数据。
df1 :
INNER_CODE TRADEDATE CLOSE_PRICE
0 101000038 2020/12/14 1.2
1 101000187 2020/12/14 2.3
df2 :
INNER_CODE CHANGEDATE TOT_NUMS
0 101000038 2019/11/1 100
1 101000038 2020/12/1 110
2 101000038 2020/12/15 120
3 101000187 2019/11/1 200
4 101000187 2020/11/1 210
5 101000187 2020/12/18 220
我想在 df1.INNER_CODE=df2.INNER_CODE
上合并它们,df2.CHANGEDATE
在 df1.TRADEDATE
之前并且最接近 df1.TRADEDATE
。
My goal result is
INNER_CODE TRADEDATE CLOSE_PRICE TOT_NUMS
0 101000038 2020/12/14 1.2 110
1 101000187 2020/12/14 2.3 210
我需要通过pandas来实现,而不是通过“sql外层应用”。我想到了一个替代方法,通过df1.apply(func)
实现,但是它很耗内存而且太效率低下。是否可以通过类似merge_asof
的pandas来实现?
谢谢。
问题已解决。 pd.merge_asof
可以解决我的问题perfectly.The df1
和df2
需要提前按照TRADEDATE和CHANGEDATE排序
pd.merge_asof(df1,df2,by='INNER_CODE',left_on='TRADEDATE',right_on='CHANGEDATE')
INNER_CODE TRADEDATE CLOSE_PRICE CHANGEDATE TOT_NUMS
0 101000038 2020-12-14 1.2 2020-12-01 110
1 101000187 2020-12-14 2.3 2020-11-01 210