如果多个条件中的某些为真,则为熊猫(布尔数学?)

时间:2019-01-21 22:15:52

标签: python pandas dataframe if-statement

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

我可以写一个真的,真的,很长的陈述来涵盖每种可能性,但是我觉得有一个更有效的解决方案。我在R中找到了类似的解决方案,可以解决如下问题:

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

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

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

2 个答案:

答案 0 :(得分:1)

假设您要过滤至少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比较来构造布尔序列。

答案 1 :(得分:0)

df.loc[:, (df > 15).sum() >=4]

用于列的子集

columns_to_consider = ['a', 'b', 'c']
df.loc[:, ((df[columns_to_consider] > 15).sum() >=4).index]
# or
df[columns_to_consider].loc[:, (df[columns_to_consider] > 15).sum() >=4]