首页 > 解决方案 > 我有两个数据框。我想根据条件将一个数据帧的值替换为另一个数据帧的标头值

问题描述

我的一个数据框(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

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

Col1    Col2    Col3    Col4    Col5

Val1    Val1    Val1    Val2    Val1
Val1    Val3    Val2    null    null
Val1    Val1    null    null    null

*如果您想知道为什么我要满足这个奇怪的条件:我正在尝试在这里进行特征工程。我已将 df1 中的类似功能手动分组到 df2 中。

比如说,“Python”、“Java”、“C”,这 3 个在“编程”*
“领导力”、“沟通”、“演示”列下,在“软技能”下

标签: pythonpandas

解决方案


使用meltwith 删除缺失值 bydropna然后replaceby dictionary

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

推荐阅读