将分类映射从一个pd.Series分配到另一个

时间:2018-08-15 12:37:58

标签: pandas mapping categories categorical-data

我想应用从分类值到从一个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

因为在s1'b'被映射到1。但是我得到的是这样:

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

为什么? set_categories操作根本没有任何作用。似乎完全没有意义...

但是我怎么能实际上做到这一点?

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

1 个答案:

答案 0 :(得分:3)

您忘记将输出分配回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