3 回答
TA贡献1725条经验 获得超7个赞
您应该查看此链接中的排序和顺序部分:Pandas Documentation on Categorical。它说:
如果分类数据是有序的(s.cat.ordered == True),那么分类的顺序就有意义并且某些操作是可能的。如果分类是无序的,.min()/.max() 将引发 TypeError。
和:
您可以将分类数据设置为使用 as_ordered() 进行排序或使用 as_unordered() 进行无序排序。默认情况下,这些将返回一个新对象。
TA贡献1827条经验 获得超9个赞
这是一个辅助函数,调用set_ordered时第一个参数设置为 True。
这是set_ordered:
def set_ordered(self, value, inplace=False):
"""
Set the ordered attribute to the boolean value.
Parameters
----------
value : bool
Set whether this categorical is ordered (True) or not (False).
inplace : bool, default False
Whether or not to set the ordered attribute in-place or return
a copy of this categorical with ordered set to the value.
"""
inplace = validate_bool_kwarg(inplace, 'inplace')
new_dtype = CategoricalDtype(self.categories, ordered=value)
cat = self if inplace else self.copy()
cat._dtype = new_dtype
if not inplace:
return cat
所以这只是设置了一个事实,即您希望将分类数据视为具有排序。这里有一些更稀疏的文档:https : //pandas.pydata.org/pandas-docs/version/0.23/generated/pandas.api.types.CategoricalDtype.ordered.html
一些讨论可以在这里找到:https : //github.com/pandas-dev/pandas/issues/14711
TA贡献1802条经验 获得超4个赞
我们可以从 pandas.Categorical
s=pd.Series(list('zbdce')).astype('category')
s
0 z
1 b
2 d
3 c
4 e
dtype: category
Categories (5, object): [b, c, d, e, z]
s.cat.as_ordered()
0 z
1 b
2 d
3 c
4 e
dtype: category
Categories (5, object): [b < c < d < e < z]
pd.Categorical(list('zbdce'))
[z, b, d, c, e]
Categories (5, object): [b, c, d, e, z]
pd.Categorical(list('zbdce'),ordered=True)
[z, b, d, c, e]
Categories (5, object): [b < c < d < e < z]
ordered : boolean, (default False) 此分类是否被视为有序分类。如果为 True,则会对结果分类进行排序。有序分类在排序时尊重其类别属性的顺序(如果提供,则反过来是类别参数)。
添加回答
举报