首页 > 解决方案 > Pandas 如果多个条件中的一些为真(布尔数学?)

问题描述

所以我有一个包含 6 列浮点数的数据框,(>= 0, <= 100)我需要选择其中至少 4 列大于 15 的每一行。

我可以写一个非常非常长的 if 语句来涵盖每一种可能性,但我觉得有一个更有效的解决方案。我在 R 中找到了一个类似的解决方案,可以解决我的问题,如下所示:

if(((x >= 15) + (y >= 15) + (z >= 15) + (i >= 15) + (j >= 15) + (k >= 15)) >= 4)

Python 和/或 Pandas 有类似的东西吗?

它显然也需要以这种df[(condition) & (condition)...]格式工作。

标签: pythonpandasdataframeif-statement

解决方案


假设您要过滤至少 4 个大于 15 的值的行,您可以使用布尔索引:

# first identify numeric columns, if necessary
num_cols = df.select_dtypes(include='number').columns

# apply conditional filter
res = df[(df[num_cols] > 15).sum(1) >= 4]

# alternative syntax
res = df[df[num_cols].gt(15).sum(1).ge(4)]

这个想法是构造一个布尔数据框df > 15,通过 逐行求和pd.DataFrame.sum,然后通过比较来构造一个布尔系列4


推荐阅读