栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

暑期实践第二十二天 2022-7-25

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

暑期实践第二十二天 2022-7-25

1.数据分组统计

1.1分组统计groupby函数

对数据进行分组统计,主要使用DataFrame对象的groupby函数,功能如下:

(一)根据给定的条件将数据拆分成组。

(二)每个组都可以独立应用函数(如求和函数(sum)、求平均值函数(mean)等)

(三)将结果合并到一个数据结构中。

语法如下:

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

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

axis:axis=1表示行,axis=0表示行,默认值为0。

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

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

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

1.1.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_csv('JD.csv',encoding='gbk')
df1 = df[['一级分类', '7天点击量', '订单预定']]
print(df1.groupby('一级分类').sum())

输出结果

                    7天点击量  订单预定
一级分类                               
数据库                    186        15
移动开发                  261         7
编程语言与程序设计       4280       192
网页制作/Web技术          345        15

1.1.2按照多列分组统计

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

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

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

1.2对分组数据进行迭代

通过for循环对分组统计数据进行迭代

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

输出结果

数据库
   一级分类  7天点击量  订单预定
25   数据库         58         2
27   数据库        128        13
移动开发
    一级分类  7天点击量  订单预定
10  移动开发         85         4
19  移动开发         32         1
24  移动开发         85         2
28  移动开发         59         0
编程语言与程序设计
              一级分类  7天点击量  订单预定
0   编程语言与程序设计         35         1
1   编程语言与程序设计         49         0
2   编程语言与程序设计         51         2
3   编程语言与程序设计         64         1
4   编程语言与程序设计         26         0
5   编程语言与程序设计         60         1
6   编程语言与程序设计        227        11
...
网页制作/Web技术
            一级分类  7天点击量  订单预定
7   网页制作/Web技术        100         7
14  网页制作/Web技术        188         8
17  网页制作/Web技术         57         0

上述代码中的name是groupby中“一级分类”的值,group是分组后的数据。如果groupby对多列进行分组,那么需要再for循环中指定多列

df1 = df[['一级分类', '二级分类', '7天点击量', '订单预定']]
for (key1, key2), group in df1.groupby(['一级分类', '二级分类']):
    print(key1, key2)
    print(group)

1.3对分组的某列或多列使用聚合函数(agg函数)

对分组统计结果使用聚合函数

按“一级分类”分组统计“7天点击量”和“订单预定”的平均值总和

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

输出结果

                     7天点击量       订单预定     
                          mean   sum     mean  sum
一级分类                                          
数据库               93.000000   186     7.50   15
移动开发             65.250000   261     1.75    7
编程语言与程序设计  178.333333  4280     8.00  192
网页制作/Web技术    115.000000   345     5.00   15

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

例:按“一级分类”分组统计“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

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

#x是“宝贝标题”对应的列
#value_counts()函数用于Series对象中的每个值进行计数并且排序
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

1.4通过字典和Series对象进行分组统计

1.4.1通过字典进行分组统计

首先创建字典建立的对应关系,然后将字典传递给groupby函数,从而实现数据分组统计

import pandas as pd  #导入pandas模块
#设置数据显示的列数和宽度
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_csv('JD.csv',encoding='gbk')  #导入csv文件
df=df.set_index(['商品名称'])
#创建字典
dict1={'上海出库销量':'北上广','北京出库销量':'北上广',
         '广州出库销量':'北上广','成都出库销量':'成都',
         '武汉出库销量':'武汉','西安出库销量':'西安'}
df1=df.groupby(dict1,axis=1).sum()
print(df1)

输出结果

                                  北上广  成都  武汉  西安
商品名称                                                  
零基础学Python(全彩版)            1991   284   246   152
Python从入门到项目实践(全彩版)     798   113    92    63
Python项目开发案例集锦(全彩版)     640   115    88    57
Python编程锦囊(全彩版)             457    85    65    47
零基础学C语言(全彩版)              364    82    63    40
SQL即查即用(全彩版)                305    29    25    40
零基础学Java(全彩版)               238    48    43    29
零基础学C++(全彩版)                223    53    35    23
零基础学C#(全彩版)                 146    27    16     7
C#项目开发实战入门(全彩版)         135    18    22    12

1.4.2通过Series对象进行分组统计

通过Series对象进行分组统计是,它与字典的方法类似。

data={'上海出库销量':'北上广','北京出库销量':'北上广',
         '广州出库销量':'北上广','成都出库销量':'成都',
         '武汉出库销量':'武汉','西安出库销量':'西安',}
s1=pd.Series(data)
print(s1)
df1=df.groupby(s1,axis=1).sum()
print(df1)

输出结果同上

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1026147.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号