比较两个数据帧并找到最大差异

comparison between two dataframes and find highest difference

我有两个数据帧 df1 和 df2。两者的索引相同 [i_batch, i_example] 列是不同的 rmse 错误。我想找到 [i_batch, i_example] df1 比 df2 低很多,或者根据常见的 [i_batch, [[i_batch, i_example]。 请注意,特定的 [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

例如,我怎样才能得到'df1[rmse_ACCELERATION] < df1[rmse_ACCELERATION]'的[i_batch, i_example]

做一个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] 的记录

使用.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