以编程方式在多个列上过滤具有单个条件的Pandas数据框

时间:2019-04-15 21:49:34

标签: python python-3.x pandas

我正在尝试在多列上过滤具有相同条件的数据框。

可以通过以下操作来实现:

>>> df = pd.DataFrame({
    "A1": [1, 2, 5, 1, 2],
    "B1": [0, 2, 0, 4, 1],
    "A2": [2, 3, 5, 1, 5],
    "B2": [4, 1, 6, 2, 1]
})

>>> df_filtered = df[(df['A1'] > 3) | (df['A2'] > 3)]

>>> df_filtered
   A1  B1  A2  B2
2   5   0   5   6
4   2   1   5   1

但是,我希望能够通过预定义变量以编程方式修复列,而不是像本示例中那样手动修复列:

cols = ['A1', 'A2']

df_filtered = df[df[cols].any(> 3)]

除了上面的代码显然不起作用。

2 个答案:

答案 0 :(得分:1)

然后我们使它起作用:-)

cols = ['A1', 'A2']
df[df[cols].gt(3).any(axis = 1)]
Out[556]: 
   A1  B1  A2  B2
2   5   0   5   6
4   2   1   5   1

答案 1 :(得分:1)

看起来可以这样做:

>>> df_filtered = df[(df[cols] > 3).any(axis=1)]

>>> df_filtered
   A1  B1  A2  B2
2   5   0   5   6
4   2   1   5   1

(此答案在Wen-Ben发布自己的答案时被删除,但我还是决定将其发布,因为它提供了稍微不同的语法)