gpt4 book ai didi

python - R 的 %in% 函数的 python 版本

转载 作者:行者123 更新时间:2023-11-28 17:46:43 24 4
gpt4 key购买 nike

我有一个“因素”的一维整数数组,这意味着不同的东西。有时多个数字表示同一件事:

import numpy as np

vec = np.arange(1, 10)
comps = {
'good': (3,),
'bad': (4, 5, 9,),
'ok': (2, 3,)
}

result = {}
for name in comps.keys():
result[name] = np.zeros(len(vec), 'bool')
for i, v in enumerate(vec):
result[name][i] = v in comps[name]

这是期望的输出。然而,随着 vec 变大并且 comps 中的键数增加,这变得非常慢。另外,它令人讨厌......在 R 中有 %in% 函数:

vec = 1:10
comp = list(
good = 3,
bad = c(4:5, 9),
ok = 2:3
)

lapply(comp, function(x) vec %in% x)

它在左侧的每个值与右侧的每个值之间进行逐元素比较,并将“逻辑或”结果作为与 vec 长度相同的 bool 向量返回。

我可以使用 pandas 变得更近更干净:

import pandas as pd

DF = pd.DataFrame({'vec': vec})

result = {}
for name in comps.keys():
result[name] = DF.vec.apply(lambda x: x in comps[name])

类似于this question...但我想要元素数组而不是单个 bool 值作为结果。

在 python 中执行此操作的最佳方法是什么? (numpy? Pandas ?)

最佳答案

您可以使用字典理解(和 Series isin 方法)创建它:

pd.DataFrame({k: df.vec.isin(v) for k, v in comps.iteritems()})

关于python - R 的 %in% 函数的 python 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17223362/

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