首页 > 解决方案 > 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)]

?

标签: pythonpandasdataframe

解决方案


您可以使用 df.any() 如下。这适用于任意数量的列(我们忽略第一列“类别”,因为它不是数字):

res=df[(df.iloc[:,1:] >3).any(axis=1)]

您当前数据框的结果是:

>>>print(res)

  category  val1  val2
0     blue     5     1
4    green     5     5

推荐阅读