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
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    opencv图像直方图均衡化及其原理
    转 让FPGA替代GPU的6大顾虑,你确定不看看吗?
    算法工程师到底在干嘛
    转 经典分类网络Googlenet
    darknet是如何对数据集做预处理的
    目标检测评价指标mAP 精准率和召回率
    opencv代码片段合集
    GAN简介
    【登录测试】登录模块的测试点
    【Jmeter自学】Jmeter里的指标
  • 原文地址:https://www.cnblogs.com/chickenwrap/p/9971644.html
Copyright © 2011-2022 走看看