gpt4 book ai didi

python - 如何过滤跨列具有接近值的行

转载 作者:行者123 更新时间:2023-12-05 03:16:49 25 4
gpt4 key购买 nike

我在 pandas 数据框中有概率列作为多类机器学习的输出。

我希望过滤模型在该行的类之间具有非常接近概率的行,并且理想情况下只关心与该行中的最高值相似的相似值,但我不确定在哪里开始。

例如我的数据是这样的:

ID    class1  class2  class3  class4  class5
row1 0.97 0.2 0.4 0.3 0.2
row2 0.97 0.96 0.4 0.3 0.2
row3 0.7 0.5 0.3 0.4 0.5
row4 0.97 0.98 0.99 0.3 0.2
row5 0.1 0.2 0.3 0.78 0.8
row6 0.1 0.11 0.3 0.9 0.2

我想过滤至少 2 个(或更多)概率类列的概率接近该行中至少一个其他概率列的行(例如,可能在 0.05 以内)。因此,示例输出将过滤为:

ID    class1  class2  class3  class4  class5
row2 0.97 0.96 0.4 0.3 0.2
row4 0.97 0.98 0.99 0.3 0.2
row5 0.1 0.2 0.3 0.78 0.8

我不介意过滤器是否包含 row6,因为它也满足我的 <0.05 不同主要要求,但理想情况下,因为 0.05 差异不是我宁愿忽略的最大概率这也是。

我可以做些什么来开发这样的过滤器?

示例数据:

编辑:我增加了我的示例数据的大小,因为我不希望具体成对,但在其行内的任何和所有行的 2 个或更多概率的列值具有接近值


d = {'ID': ['row1', 'row2', 'row3', 'row4', 'row5', 'row6'],
'class1': [0.97, 0.97, 0.7, 0.97, 0.1, 0.1],
'class2': [0.2, 0.96, 0.5, 0.98, 0.2, 0.11],
'class3': [0.4, 0.4, 0.3, 0.2, 0.3, 0.3],
'class4': [0.3, 0.3, 0.4, 0.3, 0.78, 0.9],
'class5': [0.2, 0.2, 0.5, 0.2, 0.8, 0.2]}

df = pd.DataFrame(data=d)

最佳答案

下面是一个示例,使用 numpyitertools.combinations 获取至少 N 与 0.05 匹配的相似行对:

from itertools import combinations
import numpy as np

df2 = df.set_index('ID')

N = 2

out = [(a, b) for a,b in combinations(df2.index, r=2)
if np.isclose(df2.loc[a], df2.loc[b], atol=0.05).sum()>=N]

输出:

[('row1', 'row2'), ('row1', 'row4'), ('row2', 'row4')]

跟进

My real data is 10,000 rows and I want to filter out all rows thathave more than one column of probabilities that are close to eachother. Is there a way to do this without specifying pairs

from itertools import combinations

N = 2

df2 = df.set_index('ID')

keep = set()
seen = set()

for a,b in combinations(df2.index, r=2):
if {a,b}.issubset(seen):
continue
if np.isclose(df2.loc[a], df2.loc[b], atol=0.05).sum()>=N:
keep.update({a, b})
seen.update({a, b})

print(keep)
# {'row1', 'row2', 'row4'}

关于python - 如何过滤跨列具有接近值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74452015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com