美文网首页Python笔记
Python笔记之pandas group by

Python笔记之pandas group by

作者: Sugeei | 来源:发表于2019-03-18 16:15 被阅读0次

    数据准备

    一份药品销售记录

    uniquekeys = ['PMD_YEAR', 'PMD_QUARTER', 'PMD_CITY', 'PMD_MEDICINALINFORMATIONID', 'PMD_COMPANYID',
                 'PMD_MEDICINALSALENUMBER']
    

    count()

    作用在所有不在uniquekeys给定的列上,生成一个由uniquekeys做多级索引的DateFrame。比如df中的列为[a,b,c,d,e], uniquekeys=[a,b,c], 那么count()会同时作用在[d,e]列上, 而[a,b,c]成为多级索引。info()可以看到相关信息。通常没有必要在[d,e]列上各做一次count,当df中的列数特别多时,就更不推荐这么用了。

    # data.groupby(uniquekeys).count().info()#.reset_index()
    

    也可以用as_index=False设置不生成多级索引

    # data.groupby(uniquekeys, as_index=False).count().info()#.reset_index()
    

    reset_index()可以将多级索引转换为普通的列。

    # data.groupby(uniquekeys).count().reset_index()
    

    size()

    结果中只会保留uniquekeys中存在的列, 并新增一个名叫'counts'的计数列。 也是呈目录树状的级联结构,但它不是一个DateFrame, 查看类型会发现是Series。可以用reset_index转换成DateFrame。

    type(data.groupby(uniquekeys).size())
    

    reset_index()直接作用在size()后面,再赋予新增的计数列列名'counts'可以得到一个看上去干净清爽的DateFrame, 同时满足获取各个group的计数的需求。

    # data.groupby(uniquekeys).size().reset_index(name='counts')
    

    size()方法后直接用to_frame()方法也可以得到DateFrame, 它只有唯一一列'counts', info()显示uniquekeys为这个DataFrame的多级索引。reset_index()方法仍然可以将这些索引转换成列,而自动加上默认的自增索引。

    data.groupby(uniquekeys).size().to_frame(name='counts').info()#.reset_index()
    

    groupby

    得到的每个group都可以看作一个DataFrame, apply的作用对象是每个组的数据, 可以用类似处理DataFrame的方法选取其中的部分列进行计算。比如下面",".join(x["PMD_COMPANYID"])操作将每个group中的PMD_COMPANYID列的数据拼接起来。

    data[["PMD_CITY", "PMD_COMPANYID"]].groupby(["PMD_CITY"]).apply(lambda x: ",".join(x["PMD_COMPANYID"]))
    

    相关文章

      网友评论

        本文标题:Python笔记之pandas group by

        本文链接:https://www.haomeiwen.com/subject/onkiuqtx.html