2016-11-20 121 views
2

我有一个数据框。我想根据2列之间的比较来切片。例如在下面的例子中,我想提取行,其中列xy柱大:需要布尔切片帮助

d = pd.DataFrame({'x':[1, 2, 3, 4, 5], 'y':[4, 5, 6, 7, 8]}) 

d[d[:"x"]>d[:"y"]] 

这样我得到一个错误:

"unhashable type: 'slice'"

回答

2

你需要省略:和使用boolean indexing

d[d["x"]>d["y"]] 

样品(改最后一个值):

d = pd.DataFrame({'x':[1, 2, 3, 4, 5], 'y':[4, 5, 6, 7, 3]}) 
print (d) 
    x y 
0 1 4 
1 2 5 
2 3 6 
3 4 7 
4 5 3 

print (d["x"]>d["y"]) 
0 False 
1 False 
2 False 
3 False 
4  True 
dtype: bool 

print (d[d["x"]>d["y"]]) 
    x y 
4 5 3 
+0

谢谢。你的答案在上面的例子中有效,但在另一种情况下仍然没有: 想象一下,我有一个包含2列A和B的数据框。它们包含字符串。我想提取A中包含字符串B的那些行。我在d [“B”]中使用d [d [“A”]],但现在出现如下错误:'Series'对象是可变的,因此它们不能被散列 – user3623123

+0

谢谢jezrael。命令d [d [“x”]。isin(d [“y”])])d0es不会给我一个错误。这是一个改进! :-)但仍然不能解决我的问题。我有行是列X是,说“abc”,列Y是“xxxabcxxx”胸围上面的命令不会提取它。为什么? – user3623123

+0

是的,所以需要'd = pd.DataFrame({'A':['abc','d','r t','rr','tt'],'B':['xxxabcxxx',' (d)'然后'print(d [d.apply(lambda x:xA in xB,axis = 1)]) – jezrael