python - Pandas:对列的子集应用过滤器
问题描述
假设我有这样的数据:
df = pd.DataFrame({'category': ["blue","blue","blue", "blue","green"], 'val1': [5, 3, 2, 2, 5], 'val2':[1, 3, 2, 2, 5]})
print(df)
category val1 val2
0 blue 5 1
1 blue 3 3
2 blue 2 2
3 blue 2 2
4 green 5 5
我想获取任何值> 3的行。对于我的示例,这里只有两列我可以做
df.loc[(df['val1'] > 3) | (df['val2'] > 3)]
category val1 val2
0 blue 5 1
4 green 5 5
现在假设我有一个包含大量(数字)列的数据集,并且我想获取其中任何数字列的值满足条件(例如> 3)的所有行。有没有办法检查多个列的条件而不必将它们链接起来|
?
因此,例如,假设我有一个包含 n 列的数据框,名为 val1 到 valn,并且我想要所有行,其中 val1 到 valn 中的任何值> 3。有没有比这更好/更短的方法
df.loc[(df['val1'] > 3) | (df['val2'] > 3) | ... | (df['valn'] > 3)]
?
解决方案
您可以使用 df.any() 如下。这适用于任意数量的列(我们忽略第一列“类别”,因为它不是数字):
res=df[(df.iloc[:,1:] >3).any(axis=1)]
您当前数据框的结果是:
>>>print(res)
category val1 val2
0 blue 5 1
4 green 5 5
推荐阅读
- passport.js - 使用护照从谷歌 Oauth 制作更大的谷歌个人资料图片
- c++ - 使用邻接矩阵和列表的 C++ 图形
- python - 在进行机器学习时如何保留行的唯一 ID?
- python-3.x - 使用 selenium 下载动态生成的 pdf
- php - 如何让 .ics 为 Outlook(Laravel 邮件程序)工作?
- javascript - 如何使 Uc 浏览器无法访问我的网站
- cdn - pagespeed测试分数是否考虑了CDN?
- r - 将电子表格中的值替换为多列分配的十分位值 (1-10)
- python - Python中的递归使用函数参数来跟踪但返回值丢失
- javascript - 如何让 OpenCV(javascript 版)在 Internet Explorer 11 上运行?