我有一个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]
有什么想法吗?
答案 0 :(得分:5)
我使用了loc
和all
在这个功能:
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>