2017-06-24 5 views
1

私は次のようにnumpy object column.Theデータが含まれているデータフレームを持っている:データフレームの列(numpyオブジェクト)の条件を満たすインデックスを見つける方法はありますか?

      data 
0   [1, 2, 2, 3, 4, 2] 
1  [2, 4, 2, 5, 2, 3, 2] 
2 [2, 2, 2, 8, 2, 3, 2, 9, 1] 
... 

私は条件を満たすために、カラム内のすべてのnumpyののインデックスを取得したいと思います:私は期待して出力され、(>(mean+std))or(<(mean-std))を次のように:

      data index 
0   [1, 2, 2, 3, 4, 2] [0,4] 
1  [2, 4, 2, 5, 2, 3, 2] [1,3] 
2 [2, 2, 2, 8, 2, 3, 2, 9, 1] [3,7] 
... 

私のコードは次のようである:

df['index'] = df['data'].map(lambda x: np.where(((x > x.mean() + x.std()) or (x < x.mean() - x.std())))[0]) 

しかし、それはを持っています:

The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

私は条件(例えば(>(mean+std)))の半分のみを使用しています、何も問題はありませんので、私は私の表現が間違っていると思いますが、私はそれを変更する方法がわかりません。

誰かが私を助けることができますか?事前に感謝

答えて

1

は、私はあなたがnp.logical_or and reduceが必要だと思う:

ソリューションを検証するために
df['index'] = df['data'].map(lambda x: np.where(np.logical_or 
                .reduce(((x > x.mean() + x.std()), 
                  (x < x.mean() - x.std()))))[0]) 
print (df) 
          data index 
0   [1, 2, 2, 3, 4, 2] [0, 4] 
1  [2, 4, 2, 5, 2, 3, 2] [1, 3] 
2 [2, 2, 2, 8, 2, 3, 2, 9, 1] [3, 7] 

df['index'] = df['data'].map(lambda x: ((x > x.mean() + x.std()))) 
df['index1'] = df['data'].map(lambda x: ((x < x.mean() - x.std()))) 
#https://stackoverflow.com/a/33375383/2901002 
with pd.option_context('display.max_colwidth', 200): 
    print (df) 

          data \ 
0   [1, 2, 2, 3, 4, 2] 
1  [2, 4, 2, 5, 2, 3, 2] 
2 [2, 2, 2, 8, 2, 3, 2, 9, 1] 

                  index \ 
0      [False, False, False, False, True, False] 
1    [False, True, False, True, False, False, False] 
2 [False, False, False, True, False, False, False, True, False] 

                  index1 
0      [True, False, False, False, False, False] 
1    [False, False, False, False, False, False, False] 
2 [False, False, False, False, False, False, False, False, False] 
関連する問題