我有两个数据帧,一个是大的(+百万行,有几百列),另一个是小的(10列和几百行)。他们有类似的数据:
数据框1:
ID val1 val2 Time1
234 0.32 1 306
234 0.93 0 309
235 1.02 1 305
Dataframe 2:
ID val3 val4 Time2
234 9621 234 302
234 12 0 308
235 500 9 305
我需要通过ID将值连接到Time2
的值必须大于Time1
并且所选行是所有可能选项的Min(Time2 - Time1)
的条件。
这样最终输出看起来像:
ID val1 val2 Time1 val3 val4 Time2
234 0.32 1 306 12 0 308
234 0.93 0 309 Nan Nan Nan
235 1.02 1 305 500 9 305
执行此操作的最快方法是什么?据我所知,基本连接选项无法执行此操作,行迭代只是非常缓慢。
答案 0 :(得分:1)
您可以使用merge_asof
pd.merge_asof(df1.sort_values('Time1'),df2.sort_values('Time2'),left_on='Time1',right_on='Time2',by='ID',direction='forward')
Out[677]:
ID val1 val2 Time1 val3 val4 Time2
0 235 1.02 1 305 500.0 9.0 305.0
1 234 0.32 1 306 12.0 0.0 308.0
2 234 0.93 0 309 NaN NaN NaN