我有以下熊猫数据框
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
答案 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