所以我有一个包含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)...]
格式工作。
答案 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]