比较两个数据框并找出最大差异

时间:2020-06-25 21:16:32

标签: pandas dataframe comparison

我有两个数据帧df1和df2。两者的索引都与[i_batch, i_example]相同 这些列是不同的rmse错误。我想根据常见的[i_batch,i_example]查找df1比df2低很多的[i_batch,i_example],或查找df1的错误少于df2的行。 请注意,特定的[i_batch,i_example]可能仅出现在df1或df2之一中。但是我只需要考虑df1和df2中都存在的[i_batch,i_example]。

df1 = 

                   rmse_ACCELERATION  rmse_CENTER_X  rmse_CENTER_Y  rmse_HEADING  rmse_LENGTH  rmse_TURN_RATE  rmse_VELOCITY  rmse_WIDTH
i_batch i_example                                                                                                                       
0       0.0                    1.064          1.018          0.995         0.991        1.190           0.967          1.029       1.532
1       0.0                    1.199          1.030          1.007         1.048        1.278           0.967          1.156       1.468
        1.0                    1.101          1.026          1.114         2.762        0.967           0.967          1.083       1.186
2       0.0                    1.681          1.113          1.090         1.001        1.670           0.967          1.205       1.160
        1.0                    1.637          1.122          1.183         0.987        1.521           0.967          1.191       1.278
        2.0                    1.252          1.035          1.035         2.507        1.108           0.967          1.210       1.595
3       0.0                    1.232          1.014          1.019         1.627        1.143           0.967          1.080       1.583
        1.0                    1.195          1.028          1.019         1.151        1.097           0.967          1.071       1.549
        2.0                    1.233          1.010          1.004         1.616        1.135           0.967          1.082       1.573
        3.0                    1.179          1.017          1.014         1.368        1.132           0.967          1.099       1.518

df2 =
                   rmse_ACCELERATION  rmse_CENTER_X  rmse_CENTER_Y  rmse_HEADING  rmse_LENGTH  rmse_TURN_RATE  rmse_VELOCITY  rmse_WIDTH
i_batch i_example                                                                                                                       
1       0.0                    0.071          0.034          0.048         0.114        0.006       1.309e-03          0.461       0.004
        1.0                    0.052          0.055          0.062         2.137        0.023       8.232e-04          0.357       0.011
2       0.0                    1.665          0.156          0.178         0.112        0.070       3.751e-03          2.326       0.016
        1.0                    0.880          0.210          0.088         0.055        0.202       1.449e-03          0.899       0.047
        2.0                    0.199          0.072          0.078         1.686        0.010       6.240e-04          0.239       0.008
3       0.0                    0.332          0.068          0.097         1.211        0.022       5.127e-04          0.167       0.016
        1.0                    0.252          0.075          0.070         0.368        0.013       5.295e-04          0.136       0.008
        2.0                    0.268          0.067          0.064         1.026        0.010       5.564e-04          0.175       0.010
        3.0                    0.171          0.051          0.054         0.473        0.011       4.150e-04          0.220       0.009
5       0.0                    0.014          0.099          0.119         0.389        0.123       3.846e-04          0.313       0.037

例如,如何获得{d1 [rmse_ACCELERATION] [i_batch, i_example]?

2 个答案:

答案 0 :(得分:1)

执行merge,然后根据需要进行过滤

df_merge = df_1.merge(df_2,
                       left_index=True,
                       right_index=True,
                       suffixes=('_1','_2'))
df_merge[
    df_merge['rmse_ACCELERATION_1'] < df_merge['rmse_ACCELERATION_2']
].index

但是在通过条件的两个数据框中,我都看不到具有相同[i_batch, i_example]的记录

答案 1 :(得分:1)

使用.sub(),它直接匹配索引并减去匹配项。

df3=df1.sub(df2)

df3[(df3<0).any(1)]

或者说具体一点,尝试在df1中搜索

df1[(df1.sub(df2)<0).any(1)]



                  rmse_ACCELERATION  rmse_CENTER_X  rmse_CENTER_Y  \
i_batch i_example                                                    
2       0.0                    0.016          0.957          0.912   

                   rmse_HEADING  rmse_LENGTH  rmse_TURN_RATE  rmse_VELOCITY  \
i_batch i_example                                                             
2       0.0               0.889          1.6        0.963249         -1.121   

                   rmse_WIDTH  
i_batch i_example              
2       0.0             1.144