首页 > 编程语言 >Python数据分析,办公自动化,数据分组与透视

Python数据分析,办公自动化,数据分组与透视

时间:2022-10-14 16:07:26浏览次数:60  
标签:数据分析 count 办公自动化 函数 index Python df apply groupby



数据分组是对相同类别的数据进行汇总,而数据透视表是通过对行或列的不同组合对数据进行汇总,所使用的汇总方法有求和、计数、平均值、标准差等,本文使用Python对数据进行数据分组和数据透视,下面一起来学习。


Python数据分析,办公自动化,数据分组与透视_数据


一、groupby分组

这里首先导入pandas和datetime库,生成一个包含'用户ID','日期','城市','年龄','性别','成交量'的DataFrame数据。



import pandas as pdimport datetime


df = pd.DataFrame({'用户ID':[1001,1002,1003,1004,1005,1006],                   '日期':pd.date_range(datetime.datetime(2021,3,23),periods=6),                   '城市':['北京', '上海', '广州', '上海', '杭州', '北京'],                   '年龄':[23,44,54,32,34,32],                   '性别':['F','M','M','F','F','F'],                   '成交量':[3200,1356,2133,6733,2980,3452]},                    columns =['用户ID','日期','城市','年龄','性别','成交量'])df

Python数据分析,办公自动化,数据分组与透视_数据_02

groupby可以通过传入需要分组的参数实现对数据的分组,参数可以是单列,也可以是多列,分组后可以对单列进行函数处理,也可以对多列进行函数处理。



#按照单列分组df.groupby('城市').count()

Python数据分析,办公自动化,数据分组与透视_多列_03



#按照单列分组df.groupby('城市')['用户ID'].count()

Python数据分析,办公自动化,数据分组与透视_办公自动化_04

先筛选列再groupby与先groupby再筛选列得出来的结果是一样的。



# 先筛选,然后groupby要加dfdf['成交量'].groupby([df['城市'],df['性别']]).sum()

Python数据分析,办公自动化,数据分组与透视_多列_05

如果先聚合,聚合列可以只写列名,不加变量名,因为没有筛选某列前,可以直接搜索到列。


#先groupby()再写列,列不用加dfdf.groupby(['城市','性别'])['成交量'].count()  #计数

Python数据分析,办公自动化,数据分组与透视_办公自动化_06


#先groupby()再写列,列不用加dfdf.groupby(['城市','性别'])['成交量'].sum()  #求和

Python数据分析,办公自动化,数据分组与透视_多列_07

使用unstack函数,增加数据透视的效果。


# 增加透视效果df['成交量'].groupby([df['城市'],df['性别']]).sum().unstack()

Python数据分析,办公自动化,数据分组与透视_多列_08

as_index=False,会按从0开始的数据索引。


#分组键一般会作为分层索引,如果不想要,可以在group()中加上参数:as_index=False,会按从0开始的数据索引df.groupby([df['城市'], df['性别']],as_index=False).sum()

Python数据分析,办公自动化,数据分组与透视_办公自动化_09

先数据分组,然后做描述分析。


df.groupby('城市').describe()

Python数据分析,办公自动化,数据分组与透视_多列_10

size显示数据组分类的多少。


df.groupby('城市').size()

Python数据分析,办公自动化,数据分组与透视_数据_11

二、group by与agg的用法

groupby与agg两者可以结合使用,可以对单列或多列进行单一或多个不同的聚合运算, 常用聚合函数有count,sum,std等,直接用函数名加引号即可,如果有多个函数时,可以用逗号隔开;



# 常用聚合函数用引号即可引用df.groupby(['城市', '性别']).agg('sum')

Python数据分析,办公自动化,数据分组与透视_数据_12

列表可以同时使用多个函数,用逗号隔开。



# 列表可以同时使用多个函数df.groupby(['城市', '性别']).agg(['mean','std','sum','count'])

Python数据分析,办公自动化,数据分组与透视_多列_13

reset_index用来重置索引。



# 列表可以同时使用多个函数df.groupby(['城市', '性别']).agg(['mean','std','sum','count']).reset_index()

Python数据分析,办公自动化,数据分组与透视_多列_14

用元组修改函数名。



# 可以用元组修改函数名df.groupby(['城市', '性别']).agg([('No.1', 'sum'), ('No.2', 'std')])

Python数据分析,办公自动化,数据分组与透视_多列_15

可以对不同的列使用不同的函数进行运算。



#如果不同列用不同函数,可以对不同的列使用不同的函数df.groupby(['城市', '性别']).agg({'年龄': ['max','min'],'成交量': ['sum', 'count', 'std']})

Python数据分析,办公自动化,数据分组与透视_数据_16

三、apply与agg的用法

apply与agg相同点:都可以对分组后的结果进行运算;

apply与agg不同点:agg只能对单列,apply可以对多列进行;apply可以使用匿名函数,agg不可以使用匿名函数。


#首先定义一个top函数,使用apply函数进行运算def top(df, n=2, column='成交量'):    return df.sort_values(by=column)[-n:]   # 自建函数
df.groupby('城市').apply(top)

Python数据分析,办公自动化,数据分组与透视_办公自动化_17

直接使用apply函数进行聚合运算。


df.groupby('城市').apply(top, n=3, column='成交量')

Python数据分析,办公自动化,数据分组与透视_多列_18

四、cut与qcut的用法

qcut是等样本数,cut是等值区间分,groupby和cut和qcut结合使用,可以对等值或等样本数分组后的结果进行分析。


#使用numpy生成两个随机数import numpy asdf = pd.DataFrame({'data1':np.random.randn(1000),'data2': np.random.randn(1000)})df.head()

Python数据分析,办公自动化,数据分组与透视_多列_19

将数据data1等值区间四等分。


#将数据data1等值区间四等分quariles = pd.cut(df.data1, 4)quariles[:10]

Python数据分析,办公自动化,数据分组与透视_数据_20

数据data1等样本数四等分。


#将数据data1等样本数四等分quriles_1 = pd.qcut(df.data1,4)quriles_1[:10]

Python数据分析,办公自动化,数据分组与透视_多列_21

五、apply与applymap的用法

apply函数主要用于对DataFrame中的某一column或row中的元素执行相同的函数操作,而applymap函数主要用于对DataFrame中每一个元素执行系统的操作,apply和applymap都要与lambda结合使用。


#首先生成A,B,C的一个随机数组import numpy asdf = pd.DataFrame({'A':np.random.rand(3),'B': np.random.rand(3),'C': np.random.rand(3) })df.head()

Python数据分析,办公自动化,数据分组与透视_数据_22

使用apply函数,对A列的每一个元素加1。



#对A列的每一个元素加1df["A"].apply(lambda x:x+1)

Python数据分析,办公自动化,数据分组与透视_数据_23

使用applymap对表内的每个元素加1。


#对表内的每个元素加1df.applymap(lambda x:x+1)

Python数据分析,办公自动化,数据分组与透视_办公自动化_24

定义一个get函数,对data2数据使用apply函数做聚合运算。


def get(group):    return {'min':group.min(),'max':group.max(),'count': group.count(),'mean': group.mean()}
df.data2.groupby(quariles).apply(get)

Python数据分析,办公自动化,数据分组与透视_多列_25

使用unstack函数显示数据透视表效果。


df.data2.groupby(quariles).apply(get).unstack()

Python数据分析,办公自动化,数据分组与透视_多列_26

labels=False采用默认的0开始的索引


# 去掉分组数值lable,采用默认的0开始的索引q = pd.qcut(df.data1, 10, labels=False)  df.data2.groupby(q).apply(get).unstack()

Python数据分析,办公自动化,数据分组与透视_数据_27

六、数据透视表

数据透视表使用的是pivot_table函数,接下来介绍该函数使用最多的几个参数。data表示使用数据透视表数据,values表示计算值,index表示数据透视的行,columns表示数据透视的列,aggfunc表示计算类型,margins表示是否显示合计列,margins_name表示合计列的名字。


pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')

margins显示合计,并且margins_name修改合计名称。



#margins显示合计,margins_name修改合计名称pd.pivot_table(df,values = "用户ID",columns ="性别",index="城市",aggfunc="count",margins = True,margins_name ="合计")

Python数据分析,办公自动化,数据分组与透视_数据_28

当数据透视结果有缺失值时,用fill_value = 0缺失值填充。



#fill_value = 0缺失值填充pd.pivot_table(df,values = "用户ID",columns ="性别",index="城市",aggfunc="count",fill_value = 0)

Python数据分析,办公自动化,数据分组与透视_办公自动化_29

aggfunc={"用户ID":"count","成交量":"sum"},对用户ID做计数运算,对成交量做求和运算。


pd.pivot_table(df,values = ["用户ID","成交量"],columns="性别",index="城市",aggfunc={"用户ID":"count","成交量":"sum"},fill_value = 0)

Python数据分析,办公自动化,数据分组与透视_多列_30

reset_index对数据透视结果重置索引。


pd.pivot_table(df,values = ["用户ID","成交量"],columns="性别",index="城市",aggfunc={"用户ID":"count","成交量":"sum"},fill_value = 0).reset_index()

Python数据分析,办公自动化,数据分组与透视_办公自动化_31


标签:数据分析,count,办公自动化,函数,index,Python,df,apply,groupby
From: https://blog.51cto.com/u_15828536/5757085

相关文章

  • Python数据分析,办公自动化,数据预处理
    数据分析时,首先应对数据进行清洗,这里将数据清洗分为重复值处理、缺失值处理、异常值处理三个部分,重复值处理可删除重复的字段,缺失值处理可以用线性插值、填充为0或用均值填......
  • EXCEL数据分析,迷你图制作,另类的数据图表
    在数据分析中,迷你图可以简单直观的反应数据变化情况,其制作简单,可以对一行中一系列的数据进行数据比较和趋势分析。本文使用案例数据制作迷你图,所使用的方法有,REPT函数法,以及......
  • SQL数据分析,窗口函数
    本文讲解窗口函数的概念,窗口函数与数据分组的功能相似,可以指定数据窗口进行统计分析,但窗口函数与数据分组又有所区别,窗口函数对每个组返回多行,而数据分组对每个组只返回一行......
  • SQL数据分析,子查询
    子查询用于为主查询返回其所需数据,或者对检索数据进行进一步的限制,通常将一个查询(子查询)的结果作为另一个查询(主查询)的数据来源或判断条件,常见的子查询有WHERE子查询,HAVING......
  • SQL数据分析,分组与透视
    数据分组是对相同类别的数据进行汇总,而数据透视表是通过对行或列的不同组合对数据进行汇总,所使用的汇总方法有求和、计数、平均值、标准差等,本文使用SQL对数据进行数据分组......
  • SQL数据分析,数据提取与筛选
    一张表中通常会包含很多字段,造成数据冗余,在做数据分析时,我们仅需要提取数据分析所需要的字段,这里就需要用到数据选取的知识点,同时还可以依据特定条件筛选。本文介绍数据提取......
  • Python实战—基于KNN算法尾鸢花数据集分类
    KNN模型理论K最近邻分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中......
  • 使用Python同时读取和写入同一个文件
    前言在平时想要使用python修改文件部分内容的时候,常用的做法是使用open函数(默认模式为read)打开一个文件,然后关闭文件,然后再使用write模式去写入更新的内容,最后关闭。这......
  • Python实战—自行车租赁数据分析
    本节选取自行车的租赁数据,利用numpy、pandas、matplotlib三个库,数据清洗后,做数据分析,研究时间段与自行车租赁的关系。数据来源  本节以自行车的租赁数据为例,数据来源于网......
  • 数据分析面试题集锦(二)
    大家好,今天整理了数据分析面试题集锦(二),经常会被问到,“数据分析需要学习什么技能?”,“针对实际的业务场景,如何使用数据分析工具去分析?”基于此作者总结数据分析面试常用的问......