2013-02-06 146 views
5

使用行标签所以我有这样一个数据帧:熊猫布尔索引

df = pd.DataFrame(np.random.randn(6, 3), columns=['a', 'b', 'c']) 

     a   b   c 
0 1.877317 0.109646 1.634978 
1 -0.048044 -0.837403 -2.198505 
2 -0.708137 2.342530 1.053073 
3 -0.547951 -1.790304 -2.159123 
4 0.214583 -0.856150 -0.477844 
5 0.159601 -1.705155 0.963673 

我们可以布尔指数像这样

df[df.a > 0] 

    a   b   c 
0 1.877317 0.109646 1.634978 
4 0.214583 -0.856150 -0.477844 
5 0.159601 -1.705155 0.963673 

我们还可以通过行标签这样切它:

df.ix[[0,2,4]] 

    a   b   c 
0 1.877317 0.109646 1.634978 
2 -0.708137 2.342530 1.053073 
4 0.214583 -0.856150 -0.477844 

我想同时做这两个操作(所以我避免做一个不必要的副本只做行标签f ILTER)。我该怎么去做呢?

伪什么我寻找代码:

df[(df.a > 0) & (df.__index__.isin([0,2,4]))] 
+0

你可以用'df.ix尝试[DF [ 'A'> 0,[ 0,2,4]]' – nemesv

+0

对于上面会引发异常的示例数据框,因为这是试图拉第0列,第2列和第4列,而我们只有3列。 – jason

回答

6

你几乎有它:

In [11]: df[(df.a > 0) & (df.index.isin([0, 2, 4]))] 
Out[11]: 
      a   b   c 
0 1.877317 0.109646 1.634978 
4 0.214583 -0.856150 -0.477844 
+0

确实!几乎!在那里! – jason