【问题标题】: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 列是AB 的比率,第三行等情况除外。但是,如您所见,第一行的这个比率已经四舍五入了。

如果我跑步

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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-26
      • 2018-07-20
      • 2021-07-04
      • 2017-12-31
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      相关资源
      最近更新 更多