Pandas 根据具有不同列的另一个数据框将多个列和行值设置为 nan headers

Pandas set multiple column and row values to nan based on another dataframe with different column headers

我有两个大数据框,df1:

Col1    Col2    Val1    Val2    Val3
asd     ASYL    4.2             4.2
ppq     CONE            35      35
DA      HU      100     100

df2

Col1    Col2    PR1     PR2   PR3
asd     ASYL    7       12    17
ppq     CONE    17      19    19
DA      HU      5       14    13

两个数据帧具有相同的索引列 Col1Col2,但 df1 中的 Val1, Val2, Val3df2 中的 PR1, PR2, PR3 列不同。

df2 中列的相关顺序对我来说是相同的。

我想将 df2 中的值设置为 nan df1 中的 Null 以获得以下值:

Col1    Col2    PR1     PR2   PR3
asd     ASYL    7             17
ppq     CONE            19    19
DA      HU      5       14      

我尝试了以下方法:

df2.where(df1.notna())

但它不起作用。

我不是才回答这个问题吗

df1.mask(df1.notna(),df2)

如果 df1df2 中列的相关顺序相同,则使用 df.mask along with df.set_axis and df.isna:

df2 = df2.mask(df1.set_axis(df2.columns, 1).isna())

# print(df2)

           PR1   PR2   PR3
Col1 Col2                 
asd  ASYL  7.0   NaN  17.0
ppq  CONE  NaN  19.0  19.0
DA   HU    5.0  14.0   NaN