gpt4 book ai didi

python - pandas:具有多索引的 bool 索引

转载 作者:太空狗 更新时间:2023-10-30 00:02:49 30 4
gpt4 key购买 nike

这里有很多标题相似的问题,但我找不到解决这个问题的问题。

我有来自许多不同来源的数据框,我想逐个过滤。当 bool 系列与过滤数据框的大小相同时,使用 bool 索引非常有效,但当系列的大小与过滤数据框的更高级别索引相同时,则效果不佳。

简而言之,假设我有这个数据框:

In [4]: df = pd.DataFrame({'a':[1,1,1,2,2,2,3,3,3], 
'b':[1,2,3,1,2,3,1,2,3],
'c':range(9)}).set_index(['a', 'b'])
Out[4]:
c
a b
1 1 0
2 1
3 2
2 1 3
2 4
3 5
3 1 6
2 7
3 8

还有这个系列:

In [5]: filt = pd.Series({1:True, 2:False, 3:True})
Out[6]:
1 True
2 False
3 True
dtype: bool

我想要的输出是这样的:

     c
a b
1 1 0
2 1
3 2
3 1 6
2 7
3 8

我不是在寻找没有使用filt系列的解决方案,例如:

df[df.index.get_level_values('a') != 2]
df[df.index.get_level_values('a').isin([1,3])]

我想知道我是否可以按原样使用我的输入 filt 系列,就像我在 c: 上使用过滤器一样:

filt = df.c < 7
df[filt]

最佳答案

如果您将索引“a”转换回列,您可以按如下方式进行:

>>> df = pd.DataFrame({'a':[1,1,1,2,2,2,3,3,3], 
'b':[1,2,3,1,2,3,1,2,3],
'c':range(9)})
>>> filt = pd.Series({1:True, 2:False, 3:True})
>>> df[filt[df['a']].values]
a b c
0 1 1 0
1 1 2 1
2 1 3 2
6 3 1 6
7 3 2 7
8 3 3 8

编辑。正如@joris 所建议的,这也适用于索引。以下是示例数据的代码:

>>> df[filt[df.index.get_level_values('a')].values]
c
a b
1 1 0
2 1
3 2
3 1 6
2 7
3 8

关于python - pandas:具有多索引的 bool 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25837440/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com