不可对齐的布尔系列作为索引器提供

fly*_*our 4 python filtering pandas

我正在尝试将数据框过滤为:

a= a[~(b['var1'].isin(c['var2']))]
Run Code Online (Sandbox Code Playgroud)

但出现以下错误:

"Unalignable boolean Series provided as "
pandas.core.indexing.IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match).
Run Code Online (Sandbox Code Playgroud)

我理解该声明:

print(~(b['var1'].isin(c['var2'])) [:10])
Run Code Online (Sandbox Code Playgroud)

返回一个布尔掩码的系列,这可能是不可接受的。所以,我尝试将 loc 用作:

a= a.loc[:, ~(b['var1'].isin(c['var2']))]
Run Code Online (Sandbox Code Playgroud)

但我遇到了同样的错误。我在这里缺少什么?任何意见将不胜感激。

谢谢

jez*_*ael 5

a错误意味着和 创建的掩码索引不同isin,这意味着 的索引不同b

mask = ~(b['var1'].isin(c['var2']))
Run Code Online (Sandbox Code Playgroud)

因此,可能的解决方案是更改索引,a.index并且对于不匹配的值添加Falses:

a[mask.reindex(a.index, fill_value=False)]
Run Code Online (Sandbox Code Playgroud)

或者:

a[~(b['var1'].reindex(a.index, fill_value=False).isin(c['var2']))]
Run Code Online (Sandbox Code Playgroud)