如何根据第二个数据帧映射第一个数据帧中的值?

Posted

技术标签:

【中文标题】如何根据第二个数据帧映射第一个数据帧中的值?【英文标题】:How to map the values in first dataframe based on second dataframe? 【发布时间】:2020-06-22 04:02:37 【问题描述】:

我有两个数据框。 df1 是主要的 df,df2 是参考数据帧。 df1 看起来像这样:

u1d               Status: Partisipant status         Country:Country from URL
122                           2                                4    
123                           4                                11
124                           1                                14

和 df2 看起来像这样,这是一个参考。

我希望在 df1 中我的所有值都映射到代码,例如 Status: Participant status 2 is Terminated 所以它应该代替 2 映射为 Terminated 和所有其他列。我有大约 2000 列,所以我也需要有效的方法。

【问题讨论】:

@jezrael 你能帮忙吗? 是的,我创建了答案。 【参考方案1】:

可能的解决方案是通过DataFrame.melt 重塑,通过DataFrame.merge 添加新列,最后DataFrame.pivot

df = (df1.melt('u1d', var_name='Variable_name', value_name='Value Code')
         .merge(df2, how='left')
         .pivot('u1d','Variable_name','Value Name'))

另一个想法:

for c in df1.columns[1:]:
    s = df2[df2['Variable_name'].eq(c)].set_index('Value Code')['Value Name']
    df1[c] = df1[c].map(s)

【讨论】:

你认为它会根据df2映射所有列吗?我期待基于 df2 创建嵌套字典,然后对其进行映射。 @s_khan92 - 添加了另一个解决方案 获取 uuid 错误,当我更改 df1.columns[1:] 1 ->3 然后其他列错误 我实际上基于 df2 d = for i in df['Varaible_Name'].unique(): d[i] = [df['Value Code'][j]: df['Value Name'][j] for j in df[df['Varaible_Name']==i].index] 创建了 dict,然后我想最好映射,但我不确定如何使用嵌套字典映射多个列 第一个解决方案我得到了这个错误:ValueError: You are trying to merge on object and float64 columns. If you wish to proceed you should use pd.concat

以上是关于如何根据第二个数据帧映射第一个数据帧中的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 R 中的另一个数据帧解码一个数据帧中变量的值?

如果日期介于第二个数据帧中的两个日期之间,则 r 标记第一个数据帧中的行

如果第一个数据帧中存在行,如何更新第二个数据帧的存在值

如何根据来自其他 pyspark 数据帧的日期值过滤第二个 pyspark 数据帧?

合并第二个数据帧中只有一个额外列的数据帧[重复]

Spark SCALA - 连接两个数据帧,其中一个数据帧中的连接值位于第二个数据帧中的两个字段之间