【Python】分组统计GroupBy技术详解

系统 453 0

摘要

进行数据分析时,GroupBy分组统计是非常常用的操作,也是十分重要的操作之一。基本上大部分的数据分析都会用到该操作,本文将对Python的GroupBy分组统计操作进行讲解。 码字不易,喜欢请点赞,谢谢!!!
【Python】分组统计GroupBy技术详解_第1张图片
1.GroupBy过程
首先看看分组聚合的过程,主要包括拆分(split)、应用(Apply)和合并(Combine)
【Python】分组统计GroupBy技术详解_第2张图片

2.创建DataFrame

            
              import pandas as pd
ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
         'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
         'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
         'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
         'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)
df

            
          

【Python】分组统计GroupBy技术详解_第3张图片

3.将df按照Team列分组
分组之后的grouped是个DataFrameGroupBy对象

            
              grouped = df.groupby('Team')
grouped

            
          

在这里插入图片描述

4.查看df按照Team分组之后结果
按照不同的Team值来分组

            
              grouped.groups

            
          

【Python】分组统计GroupBy技术详解_第4张图片

5.分组后的结果对Points求和

            
              grouped['Points'].sum()

            
          

【Python】分组统计GroupBy技术详解_第5张图片
分组后常用操作包括:求和(sum)、平均值(mean)、计数(count)等等,如下图。
【Python】分组统计GroupBy技术详解_第6张图片

6.根据任意长度适当的数组分组

            
              import numpy as np
key1 = np.array(list('abababbaaabb'))
df.groupby(key1).Team.count()

            
          

在这里插入图片描述

7.对分组进行迭代
GroupBy分组产生的是一组二元元组,有分组名和数据块组成。即(分组名、数据块)。

            
              for name,group in df.groupby('Team'):
    print(name)
    print(group)
    print('*******分隔符*********')

            
          

【Python】分组统计GroupBy技术详解_第7张图片
另外,对于多重建分组的情况,元组的第一个元素将是由元组组成。
即((分组名1,分组名2)、数据块)。

            
              for (name1,name2),group in df.groupby(['Team','Rank']):
    print(name1)
    print(name2)
    print(group)
    print('*******分隔符*********')

            
          

图片结果太长,只显示了部分。
【Python】分组统计GroupBy技术详解_第8张图片

8.在不同轴上分组
GroupBy默认是在axis=0轴上进行分组的,也可以在axis=1轴上进行分组聚合,不过用的相对较少。

            
              df.dtypes

            
          

【Python】分组统计GroupBy技术详解_第9张图片

            
              grouped = df.groupby(df.dtypes, axis=1)
grouped.groups

            
          

在这里插入图片描述

9.通过字典或Series进行分组

            
              people = pd.DataFrame(np.random.randn(5, 5),
                      columns=['a', 'b', 'c', 'd', 'e'],
                      index=['Joe', 'Steve', 'Wes', 'Jim','Travis'])
people.iloc[2:3, [1, 2]] = np.nan
people

            
          

【Python】分组统计GroupBy技术详解_第10张图片
根据字典聚合

            
              mapping = {'a': 'red', 'b': 'red', 'c': 'blue',
           'd': 'blue', 'e': 'red', 'f' : 'orange'}
by_column = people.groupby(mapping, axis=1)
by_column.sum()

            
          

【Python】分组统计GroupBy技术详解_第11张图片
根据Series聚合

            
              map_series = pd.Series(mapping)
people.groupby(map_series, axis=1).count()

            
          

【Python】分组统计GroupBy技术详解_第12张图片

10.通过函数进行分组

            
              people.groupby(len).sum()

            
          

【Python】分组统计GroupBy技术详解_第13张图片

11.函数、数组、列表、字典、Series组合分组

            
              key_list = ['one', 'one', 'one', 'two', 'two']
people.groupby([len, key_list]).min()

            
          

【Python】分组统计GroupBy技术详解_第14张图片

12.根据索引级别分组
回到最初的DataFrame,给他重新定义成双层索引,并且给索引命名

            
              df.columns = ([['a','a','a','b'],['Team', 'Rank', 'Year', 'Points']])
df.columns.names = ['one','two']
df

            
          

【Python】分组统计GroupBy技术详解_第15张图片
之后对索引名为one的进行分组聚合

            
              df.groupby(level='one',axis=1).count()

            
          

【Python】分组统计GroupBy技术详解_第16张图片

12.多函数聚合
其中多函数聚合中也可以使用自定义函数。

            
              df.columns = ['Team','Rank','Year','Points']
df.groupby('Team')['Points'].agg(['sum','mean','std'])

            
          

【Python】分组统计GroupBy技术详解_第17张图片

13.apply:一般性的“拆分-应用-合并”
定义函数:

            
              def top(df,n=2,column='Points'):
    return df.sort_index(by=column,ascending=False)[:n]

            
          

应用:

            
              df.groupby('Team').apply(top)

            
          

【Python】分组统计GroupBy技术详解_第18张图片
同时给apply函数传入参数:

            
              df.groupby('Team').apply(top,n=3)

            
          

【Python】分组统计GroupBy技术详解_第19张图片


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请请扫描上面二维码支持博主1元、2元、5元等您想捐的金额吧,狠狠点击下面给点支持吧

发表我的评论
最新评论 总共0条评论