在 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 中将数据框列与可接受的偏差进行比较的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL Server 2012 中将两个 nvarchar 列与 Unicode 文本进行比较