是否可以在熊猫分解方法中指定级别的顺序



我正在使用熊猫来分解由两种类型的字符串组成的数组。我想确保其中一个字符串"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

最新更新