Python:创建数据帧之间的映射以排除某些值

Python: Create mapping between dataframes to exclude certain values

我有两个数据框,我想在它们之间创建映射。 一个数据框如下所示:

ID A  B  C  D
1  10 34 50 87
2  3  56 65 44
3  44 56 73 2

另一个数据框看起来像

ID A   D
1  E   4.3
2  9   E
3  0.8 E

我需要在第一个数据框中排除在第二个数据框中具有 'E' 值的值。例如,应从第一个数据帧中删除 ID 1 列 A 处的值。

d = {'ID': [1, 2, 3], 'A': [10,3,44], 'B': [34,56,56], 'C':[50,65,73], 'D':[87,44,2]}
df1 = pd.DataFrame(data=d)

d2 = {'ID': [1, 2, 3], 'A': ['E',9,0.8], 'D':[4.3,'E','E']}
df2 = pd.DataFrame(data=d2)

假设 ID 为一列,并且您想要屏蔽 df1 中具有相同 ID 和 df2 列中的 E 的值。可以临时设置ID为索引,mask:

out = (df1
 .set_index('ID')
 .mask(df2.reindex(columns=df1.columns).set_index('ID').eq('E'))
 .reset_index()
)

输出:

   ID     A   B   C     D
0   1   NaN  34  50  87.0
1   2   3.0  56  65   NaN
2   3  44.0  56  73   NaN