2016-07-06 26 views
0

私はrowcolumnという番号を取得しようとしていますが、これはPandas DataFrameの3つの条件を満たしています。Pandasの複数の条件を満たす行番号と列番号を取得

私は0のDATAFRAME、1-11850よりも大きい)を持っています。私がrowcolumnを取得しようとすると、出力を得るのにずっと時間がかかります。

次は私が使用しようとしている例です。

import pandas as pd 
import numpy as np 

a = pd.DataFrame(np.random.randint(2, size=(1845,1850))) 

b = pd.DataFrame(np.random.randint(2, size=(5,1850))) 
b[b == 1] = -1 

c = pd.concat([a,b], ignore_index=True) 

column_positive = [] 
row_positive = [] 

column_negative = [] 
row_negative = [] 

column_zero = [] 
row_zero = [] 

for column in range(0, c.shape[0]): 
    for row in range(0, c.shape[1]): 
     if c.iloc[column, row] == 1: 
      column_positive.append(column) 
      row_positive.append(row) 
     elif c.iloc[column, row] == -1: 
      column_negative.append(column) 
      row_negative.append(row) 
     else: 
      column_zero.append(column) 
      row_zero.append(row) 

私はいくつかのウェブ検索を行なったし、np.where()はこのような何かを行うことがわかったが、私はそれを行うにはどのようには考えています。

もっと良い選択肢はありますか?

答えて

1

あなたはnp.whereはそれを行うための一つの方法だろう正しいです。ここではそれに実装だ -

# Extract the values from c into an array for ease in further processing 
c_arr = c.values 

# Use np.where to get row and column indices corresponding to three comparisons 
column_zero, row_zero = np.where(c_arr==0) 
column_negative, row_negative = np.where(c_arr==-1) 
column_positive, row_positive = np.where(c_arr==1) 

あなたはNx2形の配列として行と列を持つ気にしない場合、あなたはそのように、もう少し簡潔な方法でそれを行うことができ -

neg_idx, zero_idx, pos_idx = [np.argwhere(c_arr == item) for item in [-1,0,1]] 
+0

感謝@Divakar。また、あなたは 'np.column_stack(np.where(c.values == 1))'で答えを編集できると思います。 – Akshay

+0

@akshayまたは単に 'np.argwhere(c_arr == 1)'などです。これは 'np.argwhere'を使った2番目のアプローチが達成しようとしているものです。 – Divakar

+0

本当に、私の悪い。とにかくありがとう。 – Akshay

関連する問題