【问题标题】:Comparing dataframe columns with acceptable deviation in Python在 Python 中将数据框列与可接受的偏差进行比较
【发布时间】:2022-01-21 05:54:54
【问题描述】:

考虑到可接受的偏差而不是 100% 匹配,如何比较两个 pandas 数据帧行?

例如,可接受偏差 = 10,我想根据其他列生成下面的Result 列:

column1 | column2 | Result
100     | 110     | True
0       | 20      | False
0       | 9       | True

我找不到任何内置函数或 Pandas 函数。

【问题讨论】:

    标签: python python-3.x pandas numpy


    【解决方案1】:

    用途:

    df['Result'] = abs(df['column1'] - df['column2']) <= 10
    print(df)
    
    # Output:
       column1  column2  Result
    0      100      110    True
    1        0       20   False
    2        0        9    True
    

    替代的链式方法:

    df['Result'] = df['column1'].sub(df['column2']).abs().le(10)
    

    【讨论】:

      【解决方案2】:

      一种简单的方法:

      c1 = df['column1']
      c2 = df['column2']
      dev = 10
      df['Result'] = (c2 - c1 <= dev) & (c1 - c2 >= -dev)
      

      输出:

      >>> df
         column1  column2  Result
      0      100      110    True
      1        0       20   False
      2        0        9    True
      

      另一种解决方案:

      dev = 10
      diff = df.diff(axis=1)['column2']
      df['Result'] = (diff <= dev) & (diff >= -dev)
      

      输出:

      >>> df
         column1  column2  Result
      0      100      110    True
      1        0       20   False
      2        0        9    True
      

      【讨论】:

        【解决方案3】:

        这应该可行。在管道中使用assign

        acc_dev = 10
        
        data = pd.DataFrame(
            [
                [100, 110, True],
                [0, 20, False],
                [0, 9, True],
            ],
            columns = ["column1", "column2", "Result"]
        )
        
        data.assign(Result=lambda d: abs(d["column1"] - d["column2"]) <= 10)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多