2016-11-09 42 views
1

假设我有一个数据帧df作为熊猫:检查列分割匹配行舍入

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

r意在的A的比率B,除了像在第三行的情况。但是,正如你所看到的,第一行的这个比例是四舍五入的。

如果我运行

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

我不明白,因为四舍五入的任何行。很明显,我可以用分区来构建列,围绕它并进行比较,但是有没有办法直接从上面的选择指令中进行操作?

回答

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:浮

相对宽容参数(见笔记)。

:浮法

绝对公差参数(见注解)。

equal_nan:布尔

是否比较NaN的相等。如果为真,那么Na中的a将被认为与输出数组中的b中的NaN相等。