在 Python 中将数据框列与可接受的偏差进行比较

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案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)

【讨论】:

以上是关于在 Python 中将数据框列与可接受的偏差进行比较的主要内容,如果未能解决你的问题,请参考以下文章

Python:在数据框列中将秒转换为日期时间格式

在 Spark 中将数据框列转换为向量

在 SQL Server 2012 中将两个 nvarchar 列与 Unicode 文本进行比较

Pandas / Numpy - 如何获取和比较每列与每列的计数并写入 csv?

在 Pandas 中将两列与 NaN 进行比较并获得差异

python:从熊猫中的数据框生成的列表比数据框列长得多