如何根据第二个数据帧映射第一个数据帧中的值?
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 标记第一个数据帧中的行