代码之家  ›  专栏  ›  技术社区  ›  kekert

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

  •  3
  • kekert  · 技术社区  · 7 年前

    我有一个具有多索引和多列的数据帧:

    >>> 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 回复  |  直到 7 年前
        1
  •  3
  •   MaxU - stand with Ukraine    7 年前

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