Skip to main content
 首页 » 编程设计

python之我有两个数据框。我想根据条件用另一个数据帧的 header 值替换一个数据帧的值

2025年05月04日13mayingbao

我的一个数据框 (df1) 如下所示:

Col1    Col2    Col3    Col4    Col5 
 
A       B       C       D       E 
B       X       Y       null    null 
C       E       null    null    null       

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

Val1    Val2    Val3 
 
A       D       X 
C       Y       null 
B       null    null 
E       null    null 

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

Col1    Col2    Col3    Col4    Col5 
 
Val1    Val1    Val1    Val2    Val1 
Val1    Val3    Val2    null    null 
Val1    Val1    null    null    null 

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

例如,“Python”、“Java”、“C”,这 3 个位于“编程”栏下*
“领导力”、“沟通”、“演示”属于“软技能”

请您参考如下方法:

使用melt通过 dropna 删除缺失值然后 replace通过字典:

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