我正在使用熊猫来分解由两种类型的字符串组成的数组。我想确保其中一个字符串"XYZ"始终编码为 0,另一个字符串"ABC"始终编码为 1。
可以这样做吗?我查找了文档,没有找到任何有用的东西?
Categorical
的目的,即在分解时(可选地)指定实际类别(以及在需要时指定排序)。类别的顺序将决定因式分解顺序。如果未指定,则出现顺序将是类别的顺序。
这需要 0.16.0 才能直接在.astype
中指定类别; Categoricals
是在 0.15.0 中引入
In [10]: s = Series(list('aaabbaa')).astype('category',categories=list('ab'))
In [11]: s.cat.codes
Out[11]:
0 0
1 0
2 0
3 1
4 1
5 0
6 0
dtype: int8
由于我们现在是类别的"b","a",因此代码与上述相反。
In [12]: s = Series(list('aaabbaa')).astype('category',categories=list('ba'))
In [13]: s.cat.codes
Out[13]:
0 1
1 1
2 1
3 0
4 0
5 1
6 1
dtype: int8
AFAICT 你不能直接用因式分解来做到这一点,但构建一个dict
非常容易(然后你可以用它来做熊猫的map
)。
假设您有一个这样的数据帧:
df = pd.DataFrame({'a': ['m', 'n', 'a', 'e', 'f']})
并且您想创建一个具有"a"-> 0、"e"-> 1 的顺序。然后你可以这样做
>> dict([('a', 0), ('e', 1)] + [(e, i + 1)
.. for (i, e) in enumerate(set(df.a.values) - set({'a', 'e'}))])
{'a': 0, 'e': 1, 'f': 3, 'm': 2, 'n': 1}
同样,您可以将其用于熊猫的map
。