如何从满足条件的数据框中提取列和行索引

时间:2019-01-23 09:57:01

标签: python pandas dataframe

我想存储所有满足特定条件的Dataframe条目中的所有“坐标”(列位置和行位置)。就我而言,如果值大于0.8。

这是我的代码:

import numpy as np
import pandas as pd


randValues = np.random.rand(5,5)

df = pd.DataFrame(randValues)
df_bool = df > 0.8


colArray = np.empty([])
rowArray = np.empty([])


for dfIdx, dfCol in enumerate(df_bool):
    row = dfCol.loc[dfCol['1'] == True]

    if ~row.isempty():
        colArray.append(dfIdx)
        rowArray.append(row)

3 个答案:

答案 0 :(得分:1)

使用numpy.where进行排名,如果不是默认的索引/列值,则通过索引选择:

np.random.seed(2019)
randValues = np.random.rand(5,5)

df = pd.DataFrame(randValues, columns=list('abcde'))
print (df)
          a         b         c         d         e
0  0.903482  0.393081  0.623970  0.637877  0.880499
1  0.299172  0.702198  0.903206  0.881382  0.405750
2  0.452447  0.267070  0.162865  0.889215  0.148476
3  0.984723  0.032361  0.515351  0.201129  0.886011
4  0.513620  0.578302  0.299283  0.837197  0.526650

r, c = np.where(df > 0.8)
print (r)
[0 0 1 1 2 3 3 4]
print (c)
[0 4 2 3 3 0 4 3]

colArray = df.columns.values[c]
print (colArray)
['a' 'e' 'c' 'd' 'd' 'a' 'e' 'd']

rowArray = df.index.values[c]
print (rowArray)
[0 4 2 3 3 0 4 3]

答案 1 :(得分:0)

您可以尝试np.where并进行压缩

randValues = np.random.rand(5,5)

df = pd.DataFrame(randValues)
df_bool = df > 0.8
df_bool

     0      1        2       3       4
0   False   False   False   False   False
1   False   True    False   False   False
2   False   False   True    False   False
3   False   False   False   False   False
4   True    False   False   False   False

np.where将返回满足条件的索引,条件是第一个数组中的行索引和秒中的列索引满足

arr = np.where(df_bool)
arr


(array([1, 2, 4], dtype=int64), array([1, 2, 0], dtype=int64))

list(zip(arr[0], arr[1]))
[(1, 1), (2, 2), (4, 0)]

rowArray = arr[0]
colArray = arr[1]

答案 2 :(得分:0)

np.wherenp.column_stack一起使用:

randValues = np.random.rand(5,5)

df = pd.DataFrame(randValues)
df_bool = df > 0.8

ind = np.column_stack(np.where(df_bool)))
print(ind)
colArray = [i[1] for i in ind]    # [2,3]
rowArray = [i[0] for i in ind]    # [0,1]

输出:

array([0,2],
      [1,3])