我的一个数据框 (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
关于python - 我有两个数据框。我想根据条件用另一个数据帧的 header 值替换一个数据帧的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54529338/