3

さまざまなことを意味する「要因」の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でこれを行う最良の方法は何ですか? (でこぼこ?パンダ?)

4

1 に答える 1

2

isinこれは、辞書内包表記 (および Seriesメソッド)を使用して作成できます。

pd.DataFrame({k: df.vec.isin(v) for k, v in comps.iteritems()})
于 2013-06-20T20:52:40.190 に答える