我有一个包含多索引和多列的数据框:
>>> 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
任何线索?感谢。
答案 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