获取满足Pandas中多个条件的行号和列号

时间:2016-07-06 06:25:07

标签: python numpy pandas

我正在尝试获取rowcolumn号码,该号码符合Pandas DataFrame中的三个条件。

我的数据框格式为01-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 个答案:

答案 0 :(得分: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]]