python版本的R';函数中的%s%

python版本的R';函数中的%s%,python,numpy,pandas,Python,Numpy,Pandas,我有一个一维整数数组的“因素”,这意味着不同的事情。有时多个数字意味着同一件事: 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

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

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
中有%中的
%功能:

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

lapply(comp, function(x) vec %in% x)
它对左侧的每个值与右侧的每个值进行元素级比较,并将“逻辑或”结果作为布尔向量返回,其长度与
vec
相同

我可以使用
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])
类似于,但我希望使用elementwise数组而不是单个布尔值作为结果


在python中实现这一点的最佳方法是什么?(numpy?pandas?)

您可以使用字典理解(和系列方法)创建此项:


“3”是好的还是好的?@当然是!我知道有什么,就是找不到!FWIW在我的特定数据集上使用
isin
方法比使用
apply
快10倍左右。
pd.DataFrame({k: df.vec.isin(v) for k, v in comps.iteritems()})