有条件的熊猫康卡特

时间:2018-01-24 21:38:24

标签: python pandas concatenation

我有两个数据帧,一个是大的(+百万行,有几百列),另一个是小的(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

执行此操作的最快方法是什么?据我所知,基本连接选项无法执行此操作,行迭代只是非常缓慢。

1 个答案:

答案 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