博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python文摘:argmin/argmax 与 idxmin/idxmax
阅读量:7281 次
发布时间:2019-06-30

本文共 1961 字,大约阅读时间需要 6 分钟。

原文地址:https://www.jianshu.com/p/f21f01a92521

 

1. 缘起

pandas 里面的 idxmin 和 argmin 看起来比较陌生,便本着每日一 Py 的原则想搞搞清楚。idxmax 和 argmax 类似,不过今天题图的美女胸比较 mini,便只看 min 吧。max 函数同理。

2. Series 分析

2.1 Series.argmin 分析

先从 Series 看起。从 Series 文档里面可以看出,Series 的 argmin 等于 ,作用是用来找出第一个最小值的 index。既然返回的是 Series 的 index,那数据类型应该也是匹配的。

测试代码如下

import pandas as pdimport numpy as np df = pd.DataFrame(np.random.randn(10).reshape(2,5),columns=list('abcde')) print(df)
a         b         c         d e 0 0.045384 0.484123 1.112115 0.037907 0.152338 1 0.151654 -0.056504 1.918992 1.057143 0.081632

分别测试一下列 Series 和行 Series。

a = df.aprint('a is')print(a)print('argmin of column a is %s.' % a.argmin()) print('*'*20) A = df.loc[1] print('A is ') print(A) print('argmin of row2 is %s.' % A.argmin())
a is0    0.0453841    0.151654 Name: a, dtype: float64 argmin of column a is 0. ******************** A is a 0.151654 b -0.056504 c 1.918992 d 1.057143 e 0.081632 Name: 1, dtype: float64 argmin of row2 is b.

与我们预想的一致,返回了 index。

2.2 Series.idxmin 分析

本来寻思也用类似的方法看看 idxmin,结果在文档页赫然发现和 argmin 完全一样的介绍

This method is the Series version of ndarray.argmin.

我有点蒙,这不完全一样的功能么,为什么又两个方法?琢磨了一下,貌似可以尝试看看源代码。这就是开源的好处吧。

结果思路对了就省事儿多了。argmin 和 idxmin 的源代码链接都指向一个链接,idxmin 的源码。而且在源码后面明明确确的写着:

# ndarray compatargmin = idxminargmax = idxmax

吼吼,别名而已!

3. DataFrame.idxmin 分析

DataFrame 没有 argmin 方法,只有 idxmin。我琢磨着之所以 Series 有两个一样的函数,应该是作者为了和 numpy 保持兼容吧,而他自己更倾向于用 idxmin。

既然用 pandas,还是保持 pandas 一致吧,以后都用 idxmin。这个函数可以指定不同的轴来返回不同 Series 的最小值,代码如下

print(df.idxmin(axis=0))print('*'*30)print(df.idxmin(axis=1))
a    0b    1c    0d    0e    1dtype: int64******************************0    d1    bdtype: object

4. 总结

今天讨论了一下 pandas 里面的 argmin / idxmin 函数。对于 Series 来说,这两个其实是一个函数的两个不同名字,从源代码里面可以看出来;对于 DataFrame,则干脆没有 argmin,只有 idxmin。

所以为了保持一致性,以后可以都统一用 idxmin。这个函数可以返回当前对象第一个出现最小值的索引。

作者:张利东
链接:https://www.jianshu.com/p/f21f01a92521
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

转载于:https://www.cnblogs.com/chickenwrap/p/9971644.html

你可能感兴趣的文章
fedora22 安装fcitx 输入法
查看>>
简单的ASP.NET无刷新分页
查看>>
一段代码引发的思考
查看>>
实验三 编程、编译、连接、跟踪
查看>>
构建之法第一章
查看>>
进制之间的互相转换,进制的原码,反码,补码
查看>>
Tomcat02
查看>>
SQL Server 添加描述
查看>>
locust===Writing a locustfile
查看>>
生产者消费者模式
查看>>
oracle学习篇五:组函数,分组统计
查看>>
PHP-Manual的学习----【语言参考】----【类型】-----【NULL】
查看>>
Colorable Fantasy UI
查看>>
C# Reflection BindingFlags
查看>>
NGUI3.x Button事件
查看>>
FFmpeg 官方 20160227 之后 追加 libmfx 无法在 xp 上运行的解决方法
查看>>
多线程的使用注意点
查看>>
【GitHub】README.md文件中 markdown语法 插入超链接
查看>>
移动着,心就变了
查看>>
2014冬去春来
查看>>