我使用熊貓因式分解由兩種類型的串的陣列。我想確保字符串「XYZ」的一個總是編碼爲0,另一個字符串「ABC」總是被編碼爲1是否可以指定大熊貓比化方法級別的順序?
是否有可能做到這一點?我查閱了文檔,沒有發現任何有用的東西?
我使用熊貓因式分解由兩種類型的串的陣列。我想確保字符串「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
。