在多于C列中选择值大于V的行

时间:2018-12-27 02:39:30

标签: python pandas dataframe select

我有以下熊猫数据框

Index   A   B   C   D
----------------------
1       2   0   0   10
2       0   3   6   0
3       4   3   2   0
4       3   2   6   3
5       1   1   1   0

我想查询此数据框,以选择大于大于2(C)列的值大于的所有行。

在这种情况下,所选行将是索引3,并且将选择4行,因为它们的值大于1出现在2列以上,即。索引3的A,B,C中出现了4、3、2(均大于1),即3列,同样,索引4的值3、2、6、3(均大于1)出现在A,B, C和D,即4列。

预期产量

Index   A   B   C   D
----------------------
3       4   3   2   0
4       3   2   6   3

1 个答案:

答案 0 :(得分:2)

您可以创建以下掩码以选择行:

import pandas as pd

data = [[2, 0, 0, 10],
        [0, 3, 6, 0],
        [4, 3, 2, 0],
        [3, 2, 6, 3],
        [1, 1, 1, 0]]

df = pd.DataFrame(data=data, columns=list('ABCD'))
mask = (df.values > 1).sum(axis=1) > 2
print(df[mask])

输出

   A  B  C  D
2  4  3  2  0
3  3  2  6  3

创建掩码的主要思想是创建一个布尔值数组,其中True表示该值大于1,然后将这些值在行中求和,如果总和大于2,则意味着还有更多大于1以上的两个值。

您也可以使用numpy.count_nonzero创建遮罩:

import pandas as pd
import numpy as np

data = [[2, 0, 0, 10],
        [0, 3, 6, 0],
        [4, 3, 2, 0],
        [3, 2, 6, 3],
        [1, 1, 1, 0]]

df = pd.DataFrame(data=data, columns=list('ABCD'))
mask = np.count_nonzero(df.values > 1, axis=1) > 2
print(df[mask])

输出

   A  B  C  D
2  4  3  2  0
3  3  2  6  3