python - 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)...]
格式工作。
解决方案
假设您要过滤至少 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
。
推荐阅读
- typescript - 如何指定仅将相关属性分配给类实例?
- java - 我的电话录音服务不断崩溃
- raspberry-pi - 如何为传输守护进程更改添加的 torrent 文件位置
- java - 对地图进行排序
通过 Object.attribute [Java] - ruby-on-rails - 载波中不允许的参数用于单个文件上传
- css - 是否有定位的简写属性?
- powershell - 单击红色X后Powershell窗口需要很长时间才能关闭
- android - 有没有办法备份android库数据
- php - php 中的 2 个日期未正确显示日期
- ssl - 如何使用 Jetty ProxyServlet 处理 SSL 的“连接”请求