按多个列值过滤pandas数据帧行

时间:2016-06-09 22:56:28

标签: python pandas dataframe

我有一个pandas数据框,其中包含带有编号列的行:

    1  2  3  4  5
a   0  0  0  0  1
b   1  1  2  1  9             
c   2  2  2  2  2
d   5  5  5  5  5
e   8  9  9  9  9

如何过滤掉列子集高于或低于某个值的行?

因此,例如:我想删除列1到3中所有值都不是>的所有行。 3.在上面,这将只留下行d和e。

我过滤的列和我正在检查的值都是参数。

我尝试了一些事情,这是我得到的最接近的事情:

df[df[range(1,3)]>3]

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

我使用了locall 在这个功能:

def filt(df, cols, thresh):
    return df.loc[(df[cols] > thresh).all(axis=1)]

filt(df, [1, 2, 3], 3)

   1  2  3  4  5
d  5  5  5  5  5
e  8  9  9  9  9

答案 1 :(得分:1)

您可以在不使用apply的情况下实现此目的:

In [73]:
df[(df.ix[:,0:3] > 3).all(axis=1)]

Out[73]:
   1  2  3  4  5
d  5  5  5  5  5
e  8  9  9  9  9

因此,使用ix将df切割为前3列,然后我们与标量3进行比较,然后调用all(axis=1)创建一个布尔序列来掩盖索引< / p>