从熊猫数据框中获取至少匹配n个条件的行?

时间:2020-05-04 08:58:06

标签: python pandas

我有一个pandas数据框,想要提取与某些条件匹配的行。 在简单的情况下,我将制作如下所示的布尔“掩码”,并将其与&|组合。

import pandas as pd

foo = {
  "A": [1,2,3,4],
  "B": [1,2,3,5],
  "C": [2,4,6,8],
  "D": [5,5,5,1]}

df = pd.DataFrame(data=foo)

mask1 = df["D"] > 1  # True for rows 0,1,2
mask2 = df["B"] % 2 == 0 # True for row 1
mask3 = df["A"] == df["B"]  # True for rows 0,1,2

但是,在这种情况下,我想匹配 n 或更多此类表达式为真的行。在上面的示例中,我希望至少匹配两个条件的行。我当然知道可以通过(1 AND 2)或(1 AND 3)或(2 AND 3)之类的东西来实现,但是这种书写很快变得难以处理,我想知道是否存在更优雅的解决方案? >

2 个答案:

答案 0 :(得分:2)

您可以concat进行搜索并执行sum

print (pd.concat([mask1,mask2,mask3],1).sum(1)>=2)

0     True
1     True
2     True
3    False
dtype: bool

答案 1 :(得分:-1)

(mask1 + mask2 + mask3> = 2)怎么样?