【问题标题】: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 你能帮忙吗?
  • 是的,我创建了答案。

标签: python pandas dictionary mapping


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-13
  • 1970-01-01
  • 2020-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
相关资源
最近更新 更多