将标签添加到Dataframe中的分类数据

时间:2018-04-27 08:19:07

标签: python pandas dataframe

我正在尝试转换有关婚姻状况的调查数据,如下所示:

df['d11104'].value_counts()

[1] Married        1    250507
[2] Single         2     99131
[4] Divorced       4     32817
[3] Widowed        3     24839
[5] Separated      5      8098
[-1] keine Angabe         2571
Name: d11104, dtype: int64

到目前为止,我做了df['marstat'] = df['d11104'].cat.codes.astype('category'),屈服于

df['marstat'].value_counts()
1    250507
2     99131
4     32817
3     24839
5      8098
0      2571
Name: marstat, dtype: int64

现在,我想向列marstat添加标签,以便维护数值,即我喜欢按条件df['marstat'] == 1识别人,同时标签['Married','Single','Divorced','Widowed']附加到此变量。如何才能做到这一点?

编辑:感谢jpp的回答,我只是创建了一个新变量并手动定义了标签:

df['marstat_lb'] = df['marstat'].map({1: 'Married', 2: 'Single', 3: 'Widowed', 4: 'Divorced', 5: 'Separated'})

1 个答案:

答案 0 :(得分:1)

您可以将结果转换为数据框,并在输出中包含类别代码和名称。

可以通过枚举类别来提取类别映射的字典。下面的最小例子。

import pandas as pd

df = pd.DataFrame({'A': ['M', 'M', 'S', 'D', 'W', 'M', 'M', 'S',
                         'S', 'S', 'M', 'W']}, dtype='category')

print(df.A.cat.categories)

# Index(['D', 'M', 'S', 'W'], dtype='object')

res = df.A.cat.codes.value_counts().to_frame('count')

cat_map = dict(enumerate(df.A.cat.categories))

res['A'] = res.index.map(cat_map.get)

print(res)

#    count  A
# 1      5  M
# 2      4  S
# 3      2  W
# 0      1  D

例如,您可以通过df['A'] == 'M' df.index == 1访问“M”。

更简单的解决方案就是使用apply value_counts,然后为代码添加一个额外的列:

res = df.A.value_counts().to_frame('count').reset_index()

res['code'] = res['index'].cat.codes

  index  count  code
0     M      5     1
1     S      4     2
2     W      2     3
3     D      1     0