2015-06-14 32 views

回答

2

這是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 
1

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