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

数据框 small_df 如下所示:


> smaller_df.head()

   MSA Code  Line   RPP

0     10180   1.0  91.2

1     10180   2.0  97.4

2     10180   3.0  78.7

3     10180   4.0  93.5

4     10420   1.0  90.4

...

small_df.dtypes 导致


MSA Code      int64

Line        float64

RPP         float64

Wages        object

dtype: object

工资键.head() 给出:


   MSA Code  Average Wage

0     11260  94490.000000

1     21820  72080.000000

2     10180  71128.571429

3     13820  87338.396624

4     10420  76620.000000

...

工资键.dtypes 是:


MSA Code          int64

Average Wage    float64

dtype: object

请注意,相同的“MSA 代码”可以在smaller_df 中出现多次,但在wage_keys 中恰好出现一次。


我希望将 small_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

...

通过制作工资字典,我有以下代码来进行映射:


wages = wage_keys.set_index('MSA Code').to_dict()

smaller_df['Wages'] = smaller_df['MSA Code'].map(wages)

问题是这会导致:


   MSA Code  Line   RPP Wages

0     10180   1.0  91.2   NaN

1     10180   2.0  97.4   NaN

2     10180   3.0  78.7   NaN

3     10180   4.0  93.5   NaN

4     10420   1.0  90.4   NaN

显然,我错过了一些东西。如何将“工资”列的值设置为工资字典(或工资键数据框)中正确的对应值?


大话西游666
浏览 147回答 1
1回答

元芳怎么了

您的错误在于转换为字典。你做到了,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 Code11260    94490.00000021820    72080.00000010180    71128.57142913820    87338.39662410420    76620.000000Name: Average Wage, dtype: float64两者都导致了可以map理解的映射格式。现在您的map调用会产生预期的输出:df['Wages'] = df['MSA Code'].map(df2.set_index('MSA Code')['Average Wage'])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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python