我有一个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)之类的东西来实现,但是这种书写很快变得难以处理,我想知道是否存在更优雅的解决方案? >
答案 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)怎么样?