我正在尝试获取row
和column
号码,该号码符合Pandas DataFrame中的三个条件。
我的数据框格式为0
,1
,-1
(大于1850
);当我试图获得row
和column
时,需要永远获得输出。
以下是我一直尝试使用的示例:
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()
做了类似的事情,但我不知道该怎么做。
有人能说出更好的选择吗?
答案 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]]