繁体   English   中英

Pandas 条件过滤多列

[英]Filtering multiple columns with conditions in Pandas

我正在尝试按条件过滤多个列值,但我想知道是否有更快或更简洁的方法来做到这一点,而无需一列一列地放置,例如对条件或map()进行分组。

dt = pd.DataFrame(
    {
        "Num1": [1, -2, 3, -4, 5],
        "Num2": [-1, 2, -3, 4, 5],
        "Num3": [1, -2, 3, 4, -5],
        "Zum1": [1, 2, 3, -4, 5],
        "Num5": [1, -2, 3, -4, 5]
    }
); dt

# current solution:
dt[(abs(dt["Num1"] > 2) | abs(dt["Num2"] > 2) | abs(dt["Num3"] > 2)) & (dt['Zum1'] > 2)]

# expected outcome
   Num1  Num2  Num3  Zum1  Num5
2     3    -3     3     3     3
4     5     5    -5     5     5

如果有多个条件可以使用相同的值进行比较:

dt = dt[dt[['Num1','Num2','Num3']].abs().gt(2).any(1) & (dt['Zum1'] > 2)]
print (dt)
   Num1  Num2  Num3  Zum1  Num5
2     3    -3     3     3     3
4     5     5    -5     5     5

或者,如果需要使用Num过滤所有列,请使用DataFrame.filter

dt = dt[dt.filter(like='Num').abs().gt(2).any(1) & (dt['Zum1'] > 2)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM