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

在python中,如何将两个数据帧(一个具有值,另一个具有布尔值)合并为一个数据帧?

  •  1
  • Eliza  · 技术社区  · 2 年前

    dataframe1将是

                A     B     C     D     E
    values1  0.25  0.33  0.12  0.22  0.08
    values2  0.20  0.50  0.89  0.65  0.75
    

    dataframe2将是

                  A     B     C      D     E
    boolean1   True False  True  False  True
    boolean2  False False  True   True  True
    

          A  B     C     D     E
    1  0.25  0  0.12     0  0.08  
    2     0  0  0.89  0.65  0.78
    

    因此,如果在dataframe2中为True,则只需从dataframe1中获取值,如果为False,则替换为0。我该怎么做?

    3 回复  |  直到 2 年前
        1
  •  1
  •   Ynjxsjmh    2 年前

    您可以使用

    df1 = df1.where(df2.values, 0)
    # or
    df1 = df1.mask(~df2.values, 0)
    
    print(df1)
    
                A    B     C     D     E
    values1  0.25  0.0  0.12  0.00  0.08
    values2  0.00  0.0  0.89  0.65  0.75
    
        2
  •  0
  •   ThePyGuy Tim Roberts    2 年前

    >>> out = pd.DataFrame(df1.values * df2.values, columns=df1.columns)
    

          A    B     C     D     E
    0  0.25  0.0  0.12  0.00  0.08
    1  0.00  0.0  0.89  0.65  0.75
    

    或者,您可以将删除索引的数据帧相乘:

    >>> df1.reset_index(drop=True)*df2.reset_index(drop=True)
    
          A    B     C     D     E
    0  0.25  0.0  0.12  0.00  0.08
    1  0.00  0.0  0.89  0.65  0.75
    
        3
  •  0
  •   Himanshu Poddar    2 年前

    您可以使用 pandas.DataFrame.mask

    创建数据

    df1 = pd.DataFrame([['values1', '0.25', '0.33', '0.12', '0.22', '0.08'], ['values2', '0.20', '0.50', '0.89', '0.65', '0.75']], columns = ['index', 'A', 'B', 'C', 'D', 'E']).set_index('index')
    
    df2 = pd.DataFrame([['boolean1', True, False,  True,  False,  True], ['boolean2',  False, False,  True,   True,  True]], columns = ['index', 'A', 'B', 'C', 'D', 'E']).set_index('index')
    

    面具

    df1.mask(~df2.values, 0)
    

    这给了我们

                A  B     C     D     E
    index                             
    values1  0.25  0  0.12     0  0.08
    values2     0  0  0.89  0.65  0.75