python数据分析8:数据分组统计

1.根据给定的条件将数据拆分成组

2.每个组都可以独立应用函数(如求和,求平均值)

3.将结果合并到一个数据结构中

DataFrame.groupby(by=None,axis=0,level=None,as_index=True,sort=True,group_keys=True,squeeze=False,observed=False)

by 映射,字典或Series对象、数组、标签或标签列表。如果by是一个函数,则对象索引的每个值调用它。如果传递了一个字典或Series对象,则使用该字典或Series对象值来确定组。如果传递了数组ndarray,则按原样使用这些值为确定组

axis axis=1表示行,axis=0表示列(默认)

level 表示索引层级,默认无

as_index 布尔型,默认为True,返回以组标签为索引的对象

sort 对组进行排序,布尔型,默认为True

group_keys 布尔型,默认为True,调用apply函数时,将分组的键添加到索引以标识片段

squeeze 布尔型,默认为False,如果可能,减少返回类型的维度,否则返回一致类型

observed 当以石斑鱼为分类时,才会使用该参数。如果参数值为True,则仅显示分类石斑鱼的观测值。如果为False,则显示分类石斑鱼的所有值

返回值 DataFrameGroupBy,返回包含有关组的信息的groupby对象

# 根据一级分类统计订单数据

import pandas as pd

# 设置数据显示的列数和宽度

pd.set_option('display.max_columns', 500)

pd.set_option('display.width', 1000)

pd.set_option('display.unicode.east_asian_width', True)

df = pd.read_excel('JD.xlsx')

df1 = df[['一级分类','7天点击量','订单预定']]

print(df1.groupby('一级分类').sum())

                    7天点击量  订单预定

一级分类                             

数据库                    186        15

移动开发                  261        7

编程语言与程序设计      4280      192

网页制作/Web技术          345        15

【按照多列分组统计】

# 根据两级分类统计订单数据

import pandas as pd

# 设置数据显示的列数和宽度

pd.set_option('display.max_columns', 500)

pd.set_option('display.width', 1000)

pd.set_option('display.unicode.east_asian_width', True)

df = pd.read_excel('JD.xlsx')

df1 = df[['一级分类','二级分类','7天点击量','订单预定']]

print(df1.groupby(['一级分类','二级分类']).sum())

                                7天点击量  订单预定

一级分类          二级分类                       

数据库            Oracle              58        2

                  SQL                128        13

移动开发          Android            261        7

编程语言与程序设计 ASP.NET              87        2

                  C#                  314        12

                  C++/C语言          724        28

                  JSP/JavaWeb        157        1

                  Java                408        16

                  PHP                113        1

                  Python            2449      132

                  Visual Basic        28        0

                网页制作/Web技术  HTML                188        8

                  JavaScript          100        7

                  WEB前端              57        0

【分组并按指定列进行数据计算】

# 统计各编程语言的7天点击量

import pandas as pd

# 设置数据显示的列数和宽度

pd.set_option('display.max_columns', 500)

pd.set_option('display.width', 1000)

pd.set_option('display.unicode.east_asian_width', True)

df = pd.read_excel('JD.xlsx')

df1 = df[['一级分类','二级分类','7天点击量','订单预定']]

print(df1.groupby('二级分类')['7天点击量'].sum())

二级分类

ASP.NET          87

Android          261

C#              314

C++/C语言        724

HTML            188

JSP/JavaWeb      157

Java            408

JavaScript      100

Oracle            58

PHP              113

Python          2449

SQL              128

Visual Basic      28

WEB前端          57

Name: 7天点击量, dtype: int64

【对分组数据进行迭代】

# 迭代一级分类的订单数据

import pandas as pd

# 设置数据显示的列数和宽度

pd.set_option('display.max_columns', 500)

pd.set_option('display.width', 1000)

pd.set_option('display.unicode.east_asian_width', True)

df = pd.read_excel('JD.xlsx')

df1 = df[['一级分类','二级分类','7天点击量','订单预定']]

for name,group in df1.groupby('一级分类'):

    print(name)

    print(group)

数据库

  一级分类 二级分类  7天点击量  订单预定

25  数据库  Oracle        58        2

27  数据库      SQL        128        13

移动开发

    一级分类 二级分类  7天点击量  订单预定

10  移动开发  Android        85        4

19  移动开发  Android        32        1

24  移动开发  Android        85        2

28  移动开发  Android        59        0

编程语言与程序设计

              一级分类      二级分类  7天点击量  订单预定

0  编程语言与程序设计      ASP.NET        35        1

1  编程语言与程序设计          PHP        49        0

2  编程语言与程序设计          Java        51        2

3  编程语言与程序设计          PHP        64        1

4  编程语言与程序设计  JSP/JavaWeb        26        0

5  编程语言与程序设计            C#        60        1

6  编程语言与程序设计    C++/C语言        227        11

8  编程语言与程序设计            C#        122        3

9  编程语言与程序设计    C++/C语言        111        5

11  编程语言与程序设计    C++/C语言        165        5

12  编程语言与程序设计  JSP/JavaWeb        131        1

13  编程语言与程序设计          Java        149        10

15  编程语言与程序设计        Python      1139        79

16  编程语言与程序设计          Java        125        1

18  编程语言与程序设计    C++/C语言        149        4

20  编程语言与程序设计      ASP.NET        52        1

21  编程语言与程序设计        Python        597        25

22  编程语言与程序设计        Python        474        15

23  编程语言与程序设计          Java        83        3

26  编程语言与程序设计            C#        132        8

29  编程语言与程序设计    C++/C语言        27        2

30  编程语言与程序设计        Python        239        13

31  编程语言与程序设计    C++/C语言        45        1

32  编程语言与程序设计  Visual Basic        28        0

网页制作/Web技术

            一级分类    二级分类  7天点击量  订单预定

7  网页制作/Web技术  JavaScript        100        7

14  网页制作/Web技术        HTML        188        8

17  网页制作/Web技术    WEB前端        57        0

【迭代两级分类的订单数据】

import pandas as pd

# 设置数据显示的列数和宽度

pd.set_option('display.max_columns', 500)

pd.set_option('display.width', 1000)

pd.set_option('display.unicode.east_asian_width', True)

df = pd.read_excel('JD.xlsx')

df1 = df[['一级分类','二级分类','7天点击量','订单预定']]

for (key1,key2),group in df1.groupby(['一级分类','二级分类']):

    print(key1,key2)

    print(group)

  一级分类 二级分类  7天点击量  订单预定

25  数据库  Oracle        58        2

数据库 SQL

  一级分类 二级分类  7天点击量  订单预定

27  数据库      SQL        128        13

移动开发 Android

    一级分类 二级分类  7天点击量  订单预定

10  移动开发  Android        85        4

19  移动开发  Android        32        1

24  移动开发  Android        85        2

28  移动开发  Android        59        0

编程语言与程序设计 ASP.NET

              一级分类 二级分类  7天点击量  订单预定

0  编程语言与程序设计  ASP.NET        35        1

20  编程语言与程序设计  ASP.NET        52        1

编程语言与程序设计 C#

              一级分类 二级分类  7天点击量  订单预定

5  编程语言与程序设计      C#        60        1

8  编程语言与程序设计      C#        122        3

26  编程语言与程序设计      C#        132        8

编程语言与程序设计 C++/C语言

              一级分类  二级分类  7天点击量  订单预定

6  编程语言与程序设计  C++/C语言        227        11

9  编程语言与程序设计  C++/C语言        111        5

11  编程语言与程序设计  C++/C语言        165        5

18  编程语言与程序设计  C++/C语言        149        4

29  编程语言与程序设计  C++/C语言        27        2

31  编程语言与程序设计  C++/C语言        45        1

编程语言与程序设计 JSP/JavaWeb

              一级分类    二级分类  7天点击量  订单预定

4  编程语言与程序设计  JSP/JavaWeb        26        0

12  编程语言与程序设计  JSP/JavaWeb        131        1

编程语言与程序设计 Java

              一级分类 二级分类  7天点击量  订单预定

2  编程语言与程序设计    Java        51        2

13  编程语言与程序设计    Java        149        10

16  编程语言与程序设计    Java        125        1

23  编程语言与程序设计    Java        83        3

编程语言与程序设计 PHP

            一级分类 二级分类  7天点击量  订单预定

1  编程语言与程序设计      PHP        49        0

3  编程语言与程序设计      PHP        64        1

编程语言与程序设计 Python

              一级分类 二级分类  7天点击量  订单预定

15  编程语言与程序设计  Python      1139        79

21  编程语言与程序设计  Python        597        25

22  编程语言与程序设计  Python        474        15

30  编程语言与程序设计  Python        239        13

编程语言与程序设计 Visual Basic

              一级分类      二级分类  7天点击量  订单预定

32  编程语言与程序设计  Visual Basic        28        0

网页制作/Web技术 HTML

            一级分类 二级分类  7天点击量  订单预定

14  网页制作/Web技术    HTML        188        8

网页制作/Web技术 JavaScript

          一级分类    二级分类  7天点击量  订单预定

7  网页制作/Web技术  JavaScript        100        7

网页制作/Web技术 WEB前端

            一级分类 二级分类  7天点击量  订单预定

17  网页制作/Web技术  WEB前端        57        0

【针对不同的列使用不同的聚合函数】

# 按一级分类分组统计7天点击量、订单预定的平均值总和以及订单预定总和

import pandas as pd

# 设置数据显示的列数和宽度

pd.set_option('display.max_columns', 500)

pd.set_option('display.width', 1000)

pd.set_option('display.unicode.east_asian_width', True)

df = pd.read_excel('JD.xlsx')

df1 = df[['一级分类','二级分类','7天点击量','订单预定']]

print(df1.groupby('一级分类').agg({'7天点击量':['mean','sum'],'订单预定':['sum']}))

                    7天点击量      订单预定

                          mean  sum      sum

一级分类                                   

数据库              93.000000  186      15

移动开发            65.250000  261        7

编程语言与程序设计  178.333333  4280      192

网页制作/Web技术    115.000000  345      15

【通过自定义函数实现分组统计】

# 统计1月份销售数据中,购买次数最多的产品

import pandas as pd

# 设置数据显示的列数和宽度

pd.set_option('display.max_columns', 500)

pd.set_option('display.width', 1000)

pd.set_option('display.unicode.east_asian_width', True)

df = pd.read_excel('1月.xlsx')

max1 = lambda x: x.value_counts(dropna=False).index[0]

max1.__name__ = "购买次数最多"

df1= df.agg({

    '宝贝标题':[max1],

    '数量':['sum','mean'],

    '买家实际支付金额':['sum','mean']

})

print(df1)

                    宝贝标题  数量  买家实际支付金额

购买次数最多  零基础学Python    NaN              NaN

sum                      NaN  53.00        2528.5600

mean                    NaN  1.06          50.5712

# 通过字典分组统计“北上广”的销量

import pandas as pd

# 设置数据显示的列数和宽度

pd.set_option('display.max_columns', 500)

pd.set_option('display.width', 1000)

pd.set_option('display.unicode.east_asian_width', True)

df = pd.read_excel('JD2.xlsx')

df = df.set_index(['商品名称'])

dict1={

    '上海出库销量':'北上广','北京出库销量':'北上广',

    '广州出库销量':'广州','成都出库销量':'成都',

    '武汉出库销量':'武汉','西安出库销量':'西安',

}

df1 = df.groupby(dict1, axis=1).sum()

print(df1)

                                  北上广  广州  成都  武汉  西安

商品名称                                                       

零基础学Python(全彩版)            1413  578  284  246  152

Python从入门到项目实践(全彩版)    568  230  113    92    63

Python项目开发案例集锦(全彩版)    451  189  115    88    57

Python编程锦囊(全彩版)            321  136    85    65    47

零基础学C语言(全彩版)              249  115    82    63    40

SQL即查即用(全彩版)                217    88    29    25    40

零基础学Java(全彩版)              157    81    48    43    29

零基础学C++(全彩版)                148    75    53    35    23

零基础学C#(全彩版)                  95    51    27    16    7

C#项目开发实战入门(全彩版)          93    42    18    22    12

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354

推荐阅读更多精彩内容