按列位置屏蔽 2 df

Mask 2 df by columns position

我想用另一个 df 来掩盖一个 df 而不管列的名称,但只考虑它们的位置。 例如,给定这 2 个 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 masks A, E(of the first df) masks C and F masks E(of the first df)第二个 df).

我可以删除列名:

df.columns = [''] * len(df.columns)
mask = (df != 0)
df2.columns = [''] * len(df2.columns)
dfn = df2.mask(mask)

但是有没有更好的办法呢?提前致谢

你很接近,可以将布尔数据帧转换为布尔二维数组:

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