Pandas中使用行标签进行布尔索引

7 投票
2 回答
12233 浏览
提问于 2025-04-17 14:56

我有一个像这样的数据框:

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

我想同时进行这两种操作(这样我就可以避免为了行标签过滤而做不必要的复制)。我该怎么做呢?

这是我想要的伪代码:

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

2 个回答

0
df.loc[functools.reduce(lambda x, y : x & y, [df.a>0, df.index.isin([0, 2, 4])])]

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。

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

撰写回答