Pandas merge_asof tolerance必须是整数

时间:2018-04-18 23:01:16

标签: python pandas

我已经四处寻找,但找不到我想要的答案。我有两个数据帧,一个在A列(df2)中具有相当离散的整数值,另一个没有(df1)。我想合并这两个,使得当列A在1之内时,列C和D中的值将合并一次,否则将合并为NaN。

df1=
         A             B
0      30.00      -52.382420
1      33.14      -50.392513
2      36.28      -53.699646
3      39.42      -49.228439
..      ...            ...
497   1590.58     -77.646561
498   1593.72     -77.049423
499   1596.86     -77.711639
500   1600.00     -78.092979

df2=
         A             C           D
0      0.009          NaN         NaN                     
1      0.036          NaN         NaN
2      0.100          NaN         NaN 
3     10.000         12.4        0.29 
4     30.000         12.82       0.307 
..       ...          ...         ...
315   15000.000        NaN        7.65
316   16000.000        NaN        7.72
317   17000.000        NaN        8.36
318   18000.000        NaN        8.35

我希望输出为

merged=
         A             B            C             D
0      30.00      -52.382420      12.82         0.29
1      33.14      -50.392513       NaN           NaN
2      36.28      -53.699646       NaN           NaN
3      39.42      -49.228439       NaN           NaN
..       ...          ...          ...           ...
497    1590.58    -77.646561       NaN           NaN
498    1593.72    -77.049423       NaN           NaN
499    1596.86    -77.711639       NaN           NaN
500    1600.00    -78.092979      28.51          2.5

我试过了:

merged = pd.merge_asof(df1, df2, left_on='A', tolerance=1, direction='nearest')

这给了我一个MergeError:key必须是整数或时间戳。

到目前为止,我能够成功合并数据帧的唯一方法是:

merged = pd.merge_asof(df1, df2, on='A')

但这会占据C和D列中足够接近的值并填充NaN值。

1 个答案:

答案 0 :(得分:0)

对于有类似问题的其他人,执行合并的列必须是整数。就我而言,这意味着必须将A列更改为int。

{{1}}
相关问题