pandas 具有多索引的数据帧上的布尔掩码

boolean mask on pandas dataframe with multiindex

我有一个包含多索引和多列的数据框:

>>> df = pd.DataFrame([['A1','B1',2,1],['A1','B2',1,3],['A2','B1',2,1]], columns=['key1','key2','val1','val2'])
>>> df.set_index(['key1','key2'], inplace=True)
>>> df

Out[276]: 
           val1  val2
key1 key2            
A1   B1       2     1
     B2       1     3
A2   B1       2     1

我还有一个布尔掩码,由 df 上方的单级 mutliindex 索引:

>>> mask = pd.DataFrame([['A1',True,False],['A2',False,True]], columns=['key1','val1','val2'])
>>> mask.set_index(['key1'], inplace=True)
>>> mask

Out[277]: 
       val1   val2
key1              
A1     True  False
A2    False   True

有没有简单的方法,如何在 df 上应用布尔掩码?我只能应用具有相同形状和(多)索引结构的蒙版...

期望的输出是:

              val1    val2
key1 key2            
A1   B1       2.0     NaN
     B2       1.0     NaN
A2   B1       NaN     1.0

有线索吗?谢谢。

尝试使用DataFrame.where()方法:

In [453]: df.where(mask)
Out[453]:
           val1  val2
key1 key2
A1   B1     2.0   NaN
     B2     1.0   NaN
A2   B1     NaN   1.0