程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

为什么 max() 不起作用,但 idxmax() 在 Pandas 中的“category”数据类型上起作用?

发布于2024-11-10 09:31     阅读(759)     评论(0)     点赞(15)     收藏(4)


为什么它不起作用max(),但idxmax()在 Pandas 中的“类别”数据类型上却起作用?

import pandas as pd

s = pd.Series([1, 4, 3], index=['a', 'b', 'c'])
s = s.astype('category')

# print(s.max())  # it doesn't work.
# "you can use .as_ordered() to change the Categorical to an ordered one"

print(s.idxmax())

如果s.max()不起作用,那么从逻辑上讲idxmax()也不应该起作用!

我已阅读过文档,但仍然不明白为什么它s.max()可以工作但不起作用s.idxmax()


解决方案


如果你看一下文档

与统计分类变量相比,分类数据可能有顺序(例如“非常同意”与“同意”或“第一次观察”与“第二次观察”),但无法进行数值运算(加法、除法等)。

max()需要一种方法来比较值以确定最大值,而无序类别没有定义的比较顺序。

进一步的文档,排序和顺序

如果分类数据是有序的 ( s.cat.ordered == True),则类别的顺序有意义,并且可以执行某些操作。如果分类数据是无序的,.min()/.max()则将引发TypeError

所以这就是在您的系列上使用时出现错误的原因s.max

为什么idxmax有效?

为此,我鼓励你阅读源代码。这是关键部分:

if numeric_only:
    data = self._get_numeric_data()
else:
    data = self

res = data._reduce(
    nanops.nanargmax, "argmax", axis=axis, skipna=skipna, numeric_only=False
)

简而言之,idxmax依赖于分类数据的内部编码,因此它可以找到最大值的索引,而不需要对类别进行排序。

idxmax返回最大值首次出现的索引。因此,在您的系列中,它会找到值的最大值4,并返回该值的索引,即b



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/2045420/72e5ccba64f9ede84e70/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

15 0
收藏该文
已收藏

评论内容:(最多支持255个字符)