如何在Python中将一个包含值的DataFrame和另一个包含布尔值的DataFrame合并成一个DataFrame?

3
例如,我有两个数据框:
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。我该怎么做?


您有一个打字错误,期望结果中的最后一个单元格值应为 0.75 - ThePyGuy
3个回答

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

1

一种方法是直接对数据框中的值进行乘法运算,然后根据结果创建新的数据框。

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

0

如果保证两个数据框的形状始终相同,您可以使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接