zoukankan      html  css  js  c++  java
  • Python文摘:argmin/argmax 与 idxmin/idxmax

    原文地址: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 等于 numpy 的 ndarray.argmin 的 Series 版,作用是用来找出第一个最小值的 index。既然返回的是 Series 的 index,那数据类型应该也是匹配的。

    测试代码如下

    import pandas as pd
    import 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.a
    print('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 is
    0    0.045384
    1    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 compat
    argmin = idxmin
    argmax = 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    0
    b    1
    c    0
    d    0
    e    1
    dtype: int64
    ******************************
    0    d
    1    b
    dtype: object
    

    4. 总结

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

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



    作者:张利东
    链接:https://www.jianshu.com/p/f21f01a92521
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    start tag, end tag issues in IE7, particularly in xslt transformation
    用SandCastle为注释生成chm文档
    Firebug
    架构的重点
    Linux Shell常用技巧(十) 管道组合
    Linux JDK升级
    Linux Shell常用技巧(十二) Shell编程
    Packet Tracer 5.0实验(一) 交换机的基本配置与管理
    Linux Shell常用技巧(六) sort uniq tar split
    Linux Shell常用技巧(二) grep
  • 原文地址:https://www.cnblogs.com/chickenwrap/p/9971644.html
Copyright © 2011-2022 走看看