带有multiindex的pandas数据帧上的boolean mask

时间:2017-11-06 00:09:36

标签: python pandas dataframe boolean mask

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

>>> 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

任何线索?感谢。

1 个答案:

答案 0 :(得分:2)

尝试使用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