我有两个数据帧.我想根据条件将一个数据帧的值替换为另一个数据帧的标头值

Ris*_*pta 1 python pandas

我的一个数据框(df1)看起来像:

Col1    Col2    Col3    Col4    Col5

A       B       C       D       E
B       X       Y       null    null
C       E       null    null    null      
Run Code Online (Sandbox Code Playgroud)

另一个数据框(df2)看起来像:

Val1    Val2    Val3

A       D       X
C       Y       null
B       null    null
E       null    null
Run Code Online (Sandbox Code Playgroud)

我想要的最终数据框(最终)是:

Col1    Col2    Col3    Col4    Col5

Val1    Val1    Val1    Val2    Val1
Val1    Val3    Val2    null    null
Val1    Val1    null    null    null
Run Code Online (Sandbox Code Playgroud)

*如果你想知道为什么我有这个奇怪的条件来满足:我想在这里做特色工程.我在df2中手动对df1中的类似功能进行了分组.

比如说,"Python","Java","C",这3个列在"编程"栏目下,
"领导力","沟通","演示",在"软技能"下进行

jez*_*ael 6

用于melt删除缺失值dropna,然后replacedictionary:

df = df2.melt().dropna()
d = dict(zip(df['value'],df['variable']))
#alternative
#d = df.set_index('value')['variable']
print (d)
{'A': 'Val1', 'C': 'Val1', 'B': 'Val1', 'E': 'Val1', 'D': 'Val2', 'Y': 'Val2', 'X': 'Val3'}

df1 = df1.replace(d)
#alternative
#df1 = df1.apply(lambda x: x.map(d)).fillna(df1)
print (df1)
   Col1  Col2  Col3  Col4  Col5
0  Val1  Val1  Val1  Val2  Val1
1  Val1  Val3  Val2   NaN   NaN
2  Val1  Val1   NaN   NaN   NaN
Run Code Online (Sandbox Code Playgroud)