按列位置遮罩2 df

时间:2018-07-09 05:45:59

标签: python pandas dataframe mask

我想用另一个掩盖df,而不管列的名称如何,但只考虑它们的位置。 例如,给定这两个df:

df = pd.DataFrame({'D': [10,20,0], 'E': [0, 30, 10], 'F': [0, 0, 10]})
df2 = pd.DataFrame({'A': [1,1,1], 'C': [1, 1, 1], 'E': [1, 1, 1]})

并使用此mask

mask = (df != 0)

我想要:

     A    C    E
0  NaN  1.0  1.0
1  NaN  NaN  1.0
2  1.0  NaN  NaN

其中D的{​​{1}},A(第一个df)的掩码EC的{​​{1}}(第二个df的掩码) )。

我可以删除列名:

F

但是有更好的方法吗?预先感谢

1 个答案:

答案 0 :(得分:3)

您接近,可以将布尔数据框转换为布尔2d数组:

mask = (df != 0).values
dfn = df2.mask(mask)
print (dfn)

     A    C    E
0  NaN  1.0  1.0
1  NaN  NaN  1.0
2  1.0  NaN  NaN