gpt4 book ai didi

python - 匹配多列值的函数

转载 作者:太空宇宙 更新时间:2023-11-04 05:19:05 25 4
gpt4 key购买 nike

使用以下测试数据:

df2 = pd.DataFrame(np.random.randn(12, 3), columns=['A', 'B', 'C'])
thresh = .3
df2['matches'] = np.where(df2.A - df2.B < thresh,1,0)

我创建了 df2['matches']显示值为 1 的列什么时候df2.A - df2.B < thresh .

        A           B            C      matches
0 0.501554 -0.589855 -0.751568 0
1 -0.295198 0.512442 0.466915 1
2 0.074863 0.343388 -1.700998 1
3 0.115432 -0.507847 -0.825545 0
4 1.013837 -0.007333 -0.292192 0
5 -0.930738 1.235501 -0.652071 1
6 -1.026615 1.389294 0.035041 1
7 0.969147 -0.397276 1.272235 0
8 0.120461 -0.634686 -1.123046 0
9 0.956896 -0.345948 -0.620748 0
10 -0.552476 1.376459 0.447807 1
11 0.882275 0.490049 0.713033 0

但是,我实际上想比较所有三列,如果值在 thresh 内它将返回一个与 df2['matches] 中的匹配项数量相对应的数字.

例如,如果 Col A = 1、B = 2 和 C = 1.5 并且 thresh 为 .5,则函数将在 ['matches'] 列中返回 3。

是否有一个函数已经在做类似的事情或者任何人都可以提供帮助?

最佳答案

您可以为每对列使用阈值,然后对生成的 bool 列求和以获得所需的数字。但是请注意,此数字取决于您比较列的顺序。如果您使用 abs(df['A']-df['B']) 等,这种歧义就会消失,这很可能是您的意图。下面我假设这就是您所需要的。

通常,您可以使用 itertools.combinations 生成每对列一次:

from itertools import combinations
df = pd.DataFrame(np.random.randn(12, 3), columns=['A', 'B', 'C'])
thresh = .3
df['matches'] = sum(abs(df[k1]-df[k2])<thresh for k1,k2 in combinations(df.keys(),2))

sum() 中的生成器表达式遍历每一对列,并构造相应的 bool 向量。对每对列求和,并将结果列附加到数据框。

thresh = 0.3 的示例输出:

           A         B         C  matches
0 0.146360 -0.099707 0.633632 1
1 1.462810 -0.186317 -1.411988 0
2 0.358827 -0.758619 0.038329 0
3 0.077122 -0.213856 -0.619768 1
4 0.215555 1.930888 -0.488517 0
5 -0.946557 -0.904743 -0.004738 1
6 -0.080209 -0.850830 -0.866865 1
7 -0.997710 -0.580679 -2.231168 0
8 1.762313 -0.356464 -1.813028 0
9 1.151338 0.347636 -1.323791 0
10 0.248432 1.265484 0.048484 1
11 0.559934 -0.401059 0.863616 0

使用 itertools.combinations,将列比较为

>>> [k for k in itertools.combinations(df.keys(),2)]
('A', 'B'), ('A', 'C'), ('B', 'C')]

但如果您使用的是绝对值,这真的无关紧要(从那时起,差异就列而言是对称的)。

关于python - 匹配多列值的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40942481/

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