【问题标题】:Pandas: check rows for columns division match with roundingPandas:检查行的列除法匹配与舍入
【发布时间】:2016-11-09 12:24:56
【问题描述】:
假设我有一个 DataFrame df
A B r
145 146 99.32
1 10 10
2 20 35
r 列是A 与B 的比率,第三行等情况除外。但是,如您所见,第一行的这个比率已经四舍五入了。
如果我跑步
df[df.A/df.B == r]
由于四舍五入,我没有捕捉到任何行。显然我可以用除法构建列,将其四舍五入然后进行比较,但是有没有办法直接从上面的选择指令中做到这一点?
【问题讨论】:
标签:
python
pandas
dataframe
rounding
【解决方案1】:
我会使用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 : 浮动
相对公差参数(见注释)。
atol : 浮动
绝对容差参数(见注释)。
equal_nan : bool
是否比较 NaN 相等。如果为 True,则 a 中的 NaN 将被视为等于输出数组中 b 中的 NaN。