首页 > 解决方案 > 将分类映射从一个 pd.Series 分配到另一个

问题描述

我想将分类值的映射应用于从一个pd.Series到另一个的代码。考虑这个片段:

import pandas as pd

s1 = pd.Series(['a', 'b']).astype('category')
s2 = pd.Series(['b']).astype('category')

print(s1.cat.codes)
print(s2.cat.codes)

s2.cat.set_categories(s1.cat.categories)
print(s2.cat.codes)

我期望的输出是:

0    0
1    1
dtype: int8
0    0
dtype: int8
0    1
dtype: int8

因为 ins1 'b'映射到1. 但我得到的是:

0    0
1    1
dtype: int8
0    0
dtype: int8
0    0
dtype: int8

为什么?那次set_categories手术什么也没做。似乎完全没有意义...

但我怎么能真正做到这一点?

(此外,我需要将 中未出现的值映射到错误值s1,例如。)'c'-1

标签: pandasmappingcategoriescategorical-data

解决方案


您忘记将输出分配回s2

s2 = s2.cat.set_categories(s1.cat.categories)
print (s2)
0    b
dtype: category
Categories (2, object): [a, b]

print(s2.cat.codes)
0    1
dtype: int8

推荐阅读