按列位置屏蔽 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
我想用另一个 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