为了账号安全,请及时绑定邮箱和手机立即绑定

如何正确使用带有映射字典的 pandas Series.map()?

如何正确使用带有映射字典的 pandas Series.map()?

大话西游666 2022-03-09 20:26:43
数据框 small_df 如下所示:> smaller_df.head()   MSA Code  Line   RPP0     10180   1.0  91.21     10180   2.0  97.42     10180   3.0  78.73     10180   4.0  93.54     10420   1.0  90.4...small_df.dtypes 导致MSA Code      int64Line        float64RPP         float64Wages        objectdtype: object工资键.head() 给出:   MSA Code  Average Wage0     11260  94490.0000001     21820  72080.0000002     10180  71128.5714293     13820  87338.3966244     10420  76620.000000...工资键.dtypes 是:MSA Code          int64Average Wage    float64dtype: object请注意,相同的“MSA 代码”可以在smaller_df 中出现多次,但在wage_keys 中恰好出现一次。我希望将 small_df 中的新列“工资”设置为工资键中的相应值。所以新表应该是这样的:   MSA Code  Line   RPP Wages0     10180   1.0  91.2   71128.5714291     10180   2.0  97.4   71128.5714292     10180   3.0  78.7   71128.5714293     10180   4.0  93.5   71128.5714294     10420   1.0  90.4   76620.000000...通过制作工资字典,我有以下代码来进行映射:wages = wage_keys.set_index('MSA Code').to_dict()smaller_df['Wages'] = smaller_df['MSA Code'].map(wages)问题是这会导致:   MSA Code  Line   RPP Wages0     10180   1.0  91.2   NaN1     10180   2.0  97.4   NaN2     10180   3.0  78.7   NaN3     10180   4.0  93.5   NaN4     10420   1.0  90.4   NaN显然,我错过了一些东西。如何将“工资”列的值设置为工资字典(或工资键数据框)中正确的对应值?
查看完整描述

1 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

您的错误在于转换为字典。你做到了,


df2.set_index('MSA Code').to_dict()

# {

#     "Average Wage": {

#         "10180": 71128.571429,

#         "10420": 76620.0,

#         "11260": 94490.0,

#         "13820": 87338.396624,

#         "21820": 72080.0

#     }

# }

这导致了一个dict-of-dicts。你应该做的是,


df2.set_index('MSA Code')['Average Wage'].to_dict()

# {11260: 94490.0, 21820: 72080.0, 10180: 71128.571429, 13820: 87338.396624, 10420: 76620.0}

要么,


df2.set_index('MSA Code')['Average Wage']


MSA Code

11260    94490.000000

21820    72080.000000

10180    71128.571429

13820    87338.396624

10420    76620.000000

Name: Average Wage, dtype: float64

两者都导致了可以map理解的映射格式。现在您的map调用会产生预期的输出:


df['Wages'] = df['MSA Code'].map(df2.set_index('MSA Code')['Average Wage'])

df


   MSA Code  Line   RPP         Wages

0     10180   1.0  91.2  71128.571429

1     10180   2.0  97.4  71128.571429

2     10180   3.0  78.7  71128.571429

3     10180   4.0  93.5  71128.571429

4     10420   1.0  90.4  76620.000000


查看完整回答
反对 回复 2022-03-09
  • 1 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信