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

只为测试使用选定的列

checkColumns = ['val1','val2','val3','val25']
dfSub = df.loc[df[checkColumns].gt(3).any(1)]

最新更新