Pandas:检查列分割匹配的行与舍入

时间:2016-11-09 12:24:56

标签: python pandas dataframe rounding

假设我有一个DataFrame df

 A       B    r
145    146    99.32
1      10     10
2      20     35

r应该是AB的比率,但第三行除外。但是,正如您所看到的,第一行中的这个比率已经四舍五入。

如果我跑

df[df.A/df.B == r]

由于四舍五入,我没有抓到任何行。显然我可以用除法构造列,绕它然后进行比较,但是有没有办法直接从上面的选择指令中做到这一点?

1 个答案:

答案 0 :(得分:3)

我会使用np.isclose()方法:

In [32]: df
Out[32]:
   A  B          r
0  3  7   0.420000
1  3  7   0.428571
2  1  2  10.000000

In [33]: df.A/df.B
Out[33]:
0    0.428571
1    0.428571
2    0.500000
dtype: float64

In [34]: np.isclose(df.A/df.B, df.r)
Out[34]: array([False,  True, False], dtype=bool)

In [35]: np.isclose(df.A/df.B, df.r, atol=1e-2)
Out[35]: array([ True,  True, False], dtype=bool)

In [36]: df.loc[np.isclose(df.A/df.B, df.r, atol=1e-2)]
Out[36]:
   A  B         r
0  3  7  0.420000
1  3  7  0.428571

In [37]: df.loc[np.isclose(df.A/df.B, df.r)]
Out[37]:
   A  B         r
1  3  7  0.428571

非常灵活 - 您可以指定相对或绝对容差:

  

rtol :float

     

相对容差参数(见注释)。

     

atol :float

     

绝对容差参数(参见注释)。

     

equal_nan :bool

     

是否将NaN与之相提并论。如果为True,则a中的NaN将被视为等于输出数组中b中的NaN。