Python 中 Pandas 3个不为人知却好用的函数

浏览: 4141

在前文— Numpy 中不得不知的4个重要函数中,我们分享过Numpy中几个特别实用的功能,今天再和大家分享Pandas中的几个重要函数。当然,Pandas提供了apply函数,使我们几乎可以将任何自定义函数应用在列的所有值上,但是这些内建函数,通常都是基于C语言实现,具有更高的运行效率,并且能够帮助我们提高代码的整洁性,减少重复造轮子。

idxmin() 和 idxmax()

Pandas 里面的 idxmin 、idxmax函数与Numpy中 argmax、argmin 用法大致相同,这些函数将返回第一次出现的最小/最大值的索引。在下面代码中,我们构建了一个DataFrame,通过idxmin() 函数帮助我们找到了每列的最小值所对应的索引。

    import numpy as np
    import pandas as pd

    df = pd.DataFrame(np.random.randn(12).reshape(3,4),columns=list('abcd'))
    df

      df.idxmin(axis=0)

      idxmin() 函数接受一个可选参数axis, 可以用来控制是按照行还是列的维度查找最小值的索引,默认是axis=0。

        a    2
        b 1
        c 0
        d 1
        dtype: int64

        nsmallest() 和 nlargest()

        在pandas库里面,我们常常关心的是最大的前几个,比如销售最好的几个产品。head()函数只能看到看到DataFrame的前几行,如果需要看到最大或者最小的几行就需要先进行排序。max()和min()可以看到最大或者最小值,但是只能看到一个值。

        假设我们有一份活动的费用表:

          data = {
          'Name': ['Bob','Bob','Bob', 'Mark', 'Jess', 'Jess','Jhon'],
          'Activity': ['A', 'A', 'B','A','C','C','D'],
          'Spend': [121, 98, 51,94,145,93,137],
          }
          df = pd.DataFrame(data)
          df

          活动费用表

          现在,让我们康康最费钱的三次活动?

            df.nlargest(n=3,columns='Spend')

            花费最高的三次活动

            cumcount() 和 cumsum()

            这是两个非常酷的内建函数,用于分组累加计数和累加求和,可以为您提供许多帮助。我们还是基于上一节中的活动费用表,来进行演示。

            活动费用表

            现在我们想完成以下几个功能:

            •按照Name分组统计,每个人累计参加活动次数•按照Name分组统计,每个人累计参加活动费用

              df['Activity_count'] = df.groupby('Name')['Activity'].cumcount()
              df['Activity_sum'] = df.groupby('Name')['Spend'].cumsum()
              df

              我们可以看到,我们的累计计数和累加求和都是在分组的维度上进行聚合的,是不是十分方便呢?

              其实,pandas中相关的函数还有cummax()、cummin() 、cumprod() 等,这里就不一一介绍了,感兴趣的可以自行查找pandas官方文档。

              欢迎关注我的公众号“数据科学杂谈”,原创技术文章第一时间推送。

              image.png

              推荐 0
              本文由 ID王大伟 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
              转载、引用前需联系作者,并署名作者且注明文章出处。
              本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

              0 个评论

              要回复文章请先登录注册