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
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    tuple 元组及字典dict
    day 49 css属性补充浮动 属性定位 抽屉作业
    day48 选择器(基本、层级 、属性) css属性
    day47 列表 表单 css初识
    day 46 http和html
    day 45索引
    day 44 练习题讲解 多表查询
    day 40 多表查询 子查询
    day39 表之间的关联关系、 补充 表操作总结 where 、group by、
    day38 数据类型 约束条件
  • 原文地址:https://www.cnblogs.com/chickenwrap/p/9971644.html
Copyright © 2011-2022 走看看