自定义分类值到数值的映射

时间:2018-11-22 04:03:59

标签: python mapping

我有一些具有类别值的对象类型列,例如15-16年,17-23年.....我已将它们转换为category,然后转换为cat.codes。但是,对于第一个0-4年组,编码值从0开始,我希望编码从1开始,即0-4-> 1、5-12->和@@-> NaN 使用字典映射的建议解决方案仍然存在问题。以下是mcve

import pandas as pd
data = ['0-4 Years', '5-12 Years','13-18 Years', '19-21 Years','22-25 Years','26-29 Years','30-35 Years',
        '36-41 Years','42-45 Years','46-49 Years','50-55 Years', '56-63 Years']
df = pd.DataFrame(data,columns=['Age'],dtype=object)
df['Age']=df['Age'].astype('category')
cats = dict(enumerate(df['Age'].cat.categories, 2))
df['Age']=df['Age'].cat.codes.map(cats).astype('category')
df['Age']

这是输出,如您所见,如果我更改除0以外的枚举开始,则存在值NaN的问题。其次,该列也未编码:

df['Age']
0             NaN
1     36-41 Years
2             NaN
3             NaN
4       0-4 Years
5     13-18 Years
6     19-21 Years
7     22-25 Years
8     26-29 Years
9     30-35 Years
10    42-45 Years
11    46-49 Years
Name: Age, dtype: category
Categories (9, object): [0-4 Years, 13-18 Years, 19-21 Years, 22-25 Years, ..., 30-35 Years, 36-41 Years, 42-45 Years, 46-49 Years]

如何解决此问题。

1 个答案:

答案 0 :(得分:0)

您可以创建自己的字典,以映射代码和类别:

cats = dict(enumerate(df['Age'].cat.categories, 1))

并使用此字典将其映射到数据框中

df['Age'].cat.codes.map(cats).astype('category')