这里有很多标题类似的问题,但我找不到一个针对这个问题的。
我有来自许多不同来源的数据框,并且我想通过其他数据框进行过滤。当布尔序列的大小与筛选的数据框相同时,使用布尔索引非常有效,但是当序列的大小与筛选数据框的一个更高级别索引相同时,则无法使用。
简而言之,假设我有以下数据框:
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]
df[df.index.get_level_values('a').isin(filt)]
怎么样?我认为你不能按照你的建议来做你想做的事情,因为你的系列与MultiIndex的一个级别不是“相同大小”。正常显示只会显示该级别的三个值,但是每个MultiIndex级别实际上与整个DataFrame一样长。 - BrenBarndf[df.index.get_level_values('a').isin(filt[filt].index)]
。我想 "不,这是不可能的" 是一个公正的答案。 - Korem