分配从一个 pd.Series 到另一个的分类映射
Assign categorical mapping from one pd.Series to another
我想应用从分类值到代码的映射,从一个 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
。)
您忘记将输出分配回 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
我想应用从分类值到代码的映射,从一个 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
。)
您忘记将输出分配回 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