python - 我有两个数据框。我想根据条件将一个数据帧的值替换为另一个数据帧的标头值
问题描述
我的一个数据框(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 个在“编程”*
“领导力”、“沟通”、“演示”列下,在“软技能”下
解决方案
使用melt
with 删除缺失值 bydropna
然后replace
by 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
推荐阅读
- java - IBM-MQ PCF 用于获取特定主题的订阅者数量
- haskell - 从字符串读取并转换为动态
- python - 多处理顺序运行
- android - 没有 USB 的 Android 开发者
- python - 在 for 循环后弹出元素时列表索引超出范围
- wordpress - WordPress - 以编程方式在页面中插入 Elementor 小部件
- python - Python - 无法解码 JSON
- php - Laravel where 复杂语句
- c# - 使用实体框架 2.2 在 .net 核心中启用数据库上下文日志记录
- sql - SERACH ALL 时 SQL 查询花费了太多时间