PandaDataframe浮点比较问题

我有一个看起来像这样的数据集,其中第三列是通过将第一列除以第二列得出的:

    A_CLOSE_PRICE   B_CLOSE_PRICE   A_CLOSE_PRICE/B_CLOSE_PRICE
0          113.55            0.00                           inf
1           97.85           80.00                      1.223125
2           60.00           70.00                      0.857143
3           51.65           51.65                      1.000000
4           53.50             NaN                           NaN
5             NaN         1649.60                           NaN
6           40.00           40.50                      0.987654
7            1.10            1.00                      1.100000

由于我想显示包含超过 10% 差异的行,我运行以下命令:

(df['A_CLOSE_PRICE/B_CLOSE_PRICE'] - 1 ).abs() > 0.1

但是如下所示的最后一行返回“True”而不是“False”,这在我看来就像一个浮点问题。有谁知道应该如何正确处理此问题,以便我可以获得正确的结果?

0     True
1     True
2     True
3    False
4    False
5    False
6    False
7     True

回答

是的,您有一个浮点问题,我认为您可以df.pct_change直接在 axis=1 上使用内置函数np.isclose来处理浮点比较

s = df[['B_CLOSE_PRICE','A_CLOSE_PRICE']].pct_change(axis=1).iloc[:,-1].abs()
s.gt(0.1) & ~np.isclose(s-0.1,0)

0     True
1     True
2     True
3    False
4    False
5    False
6    False
7    False


以上是PandaDataframe浮点比较问题的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>