2016-07-06 60 views
0

我正在尝试获取rowcolumn号码,该号码符合Pandas DataFrame中的三个条件。获取满足Pandas中多个条件的行和列号

我有0一个数据帧,1-1(大于1850);当我尝试获取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'的第二种方法试图实现的。 – Divakar

+0

真的,我的坏。不管怎么说,还是要谢谢你。 – Akshay