忽略索引以避免布尔掩码抛出“Unalignable boolean Series as as indexer”

时间:2017-06-29 09:54:46

标签: python pandas

我有这个索引数据框:

In [15]: df = pd.DataFrame({'a': [False, False, False], 'b': [True, False, False]}, index=['a', 'b', 'c'])

In [16]: df
Out[16]:
       a      b
a  False   True
b  False  False
c  False  False

我有相同尺寸的布尔掩码(非索引)数据帧:

In [17]: mask = pd.DataFrame({'a': [False, False, False], 'b': [True, False, False]})

In [18]: mask
Out[18]:
       a      b
0  False   True
1  False  False
2  False  False

我想要像这样的子集:

In [19]: df.loc[~mask.any(axis=1)]

但是这会引发:

---------------------------------------------------------------------------
IndexingError                             Traceback (most recent call last)
<ipython-input-19-54eb24f8acdb> in <module>()
----> 1 df.loc[~mask.any(axis=1)]

… 

IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match

在这种情况下,如何“忽略”索引?

1 个答案:

答案 0 :(得分:1)

两个索引必须相同,所以工作:

mask.index = df.index
print (df.loc[~mask.any(axis=1)])
       a      b
b  False  False
c  False  False

或者使用来自John Galt注释的建议 - 转换为numpy数组 - 然后不使用索引值,因为不存在:

print (df.loc[~mask.any(axis=1).values])
       a      b
b  False  False
c  False  False