さまざまなことを意味する「要因」の1D整数配列があります。複数の数字が同じことを意味する場合があります。
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
。
次を使用して、より近く、よりきれいにすることができます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])
この質問に似ています...しかし、結果として単一のブール値ではなく要素ごとの配列が必要です。
Pythonでこれを行う最良の方法は何ですか? (でこぼこ?パンダ?)