JMUrjxh数据分析与实践——Pandas进阶

文章介绍了Pandas库中的分组聚合功能,包括使用groupby进行数据分组,通过apply和agg函数进行聚合操作,如sum、mean等。同时,详细阐述了如何创建透视表和交叉表,利用pivot_table和crosstab函数进行数据汇总和分析,展示了不同参数的用法及其在数据分析中的应用。
摘要由CSDN通过智能技术生成

一、Pandas分组聚合

1、流程

分组聚合的流程主要有三步:

分割步骤将DataFrame按照指定的键分割成若干组;

应用步骤对每个组应用函数,通常是累计、转换或过滤函数;

组合步骤将每一组的结果合并成一个输出数组。

2、分组

通常我们将数据分成多个集合的操作称之为分组,Pandas中使用groupby()函数来实现分组操作。

(1)单列和多列分组对分组后的子集进行数值运算时,不是数值的列会自动过滤

import pandas as pd

data = {'A': [1, 2, 2, 3, 2, 4],

'B': [2014, 2015, 2014, 2014, 2015, 2017],

'C': ["a", "b", "c", "d", "e", "f"],

'D': [0.5, 0.9, 2.1, 1.5, 0.5, 0.1]

}

df = pd.DataFrame(data)

df.groupby("B") #单列分组 返回的是一个groupby对象

df.groupby(["B","C"]) #多列分组

(2)Series系列分组

选取数据帧中的一列作为index进行分组:

df["A"].groupby(df["B"]) #df的 A 列根据 B 进行分组

(3)通过数据类型或者字典分组

数据类型分组:

df.groupby(df.dtypes,axis=1) # axis=1表示按列分组,以数据类型为列名

传入字典分组:

dic = {"A": "number", "B": "number", "C": "str", "D": "number"}

df.groupby(dic, axis=1) #按列分组,列名是字典的值

(4)获取单个分组

使用get_group()方法可以选择一个组。

df.groupby("A").get_group(2)

输出:

A B C D

1 2 2015 b 0.9

2 2 2014 c 2.1

4 2 2015 e 0.5

(5)对分组进行迭代

GroupBy对象支持迭代,可以产生一组二元元组(由分组名和数据块组成)。

for name,data in df.groupby("A"):

print(name)

print(data)

输出:

1

A B C D

0 1 2014 a 0.5

2

A B C D

1 2 2015 b 0.9

2 2 2014 c 2.1

4 2 2015 e 0.5

3

A B C D

3 3 2014 d 1.5

4

A B C D

5 4 2017 f 0.1

3、聚合

聚合函数为每个组返回单个聚合值。当创建了groupby对象,就可以对分组数据执行多个聚合操作。比较常用的是通过聚合函数或等效的agg方法聚合。常用的聚合函数如下表:

函数名说明

count分组中非空值的数量

sum非空值的和

mean非空值的平均值

median非空值的中位数

std、var无偏标准差和方差

min、max非空值的最小和最大值

prod非空值的积

first、last第一个和最后一个非空值

(1)应用单个聚合函数

对分组后的子集进行数值运算时,不是数值的列会自动过滤

import pandas as pd

import numpy as np

data = {'A': [1, 2, 2, 3, 2, 4],

'B': [2014, 2015, 2014, 2014, 2015, 2017],

'C': ["a", "b", "c", "d", "e", "f"],

'D': [0.5, 0.9, 2.1, 1.5, 0.5, 0.1]

}

df = pd.DataFrame(data)

df.groupby("B").sum() #对分组进行求和

(2)应用多个聚合函数

df.groupby("B").agg([np.sum,np.mean,np.std])

(3)自定义函数传入agg()中

def result(df):

return df.max() - df.min()

df.groupby("B").agg(result) #求每一组最大值与最小值的差

(4)对不同的列使用不同的聚合函数

mapping = {"A":np.sum,"B":np.mean}

df.groupby("C").agg(mapping)

二、Pandas创建透视表和交叉表

1、透视表

透视表是各种电子表格程序和其他数据分析软件中一种常见的数据汇总工具。它根据一个或多个键对数据进行聚合,并根据行和列上得分组建将数据分配到各个矩形区域中。在pandas中,可以通过pivot_table函数创建透视表。

(1)pivot_talbe函数的参数:

DataFrame.pivot_table(self, values=None, index=None, columns=None,ggfunc='mean', fill_value=None, .margins=False,dropna=True, margins_name='All')

(2)参数名说明

values待聚合的列的名称。默认聚合所有数值列

index用于分组的列名或其他分组键,出现在结果透视表的行

columns用于分组的列名或其他分组键,出现在结果透视表的列

aggfunc聚合函数或函数列表,默认为mean,可以是任何对groupby有效的函数

fill_value用于替换结果表中的缺失值

dropnaboolean值,默认为True

margins_namestring,默认为‘ALL’,当参数margins为True时,ALL行和列的名字

示例:

data = {'A': [1, 2, 2, 3, 2, 4],

'B': [2014, 2015, 2014, 2014, 2015, 2017],

'C': ["a", "b", "c", "d", "e", "f"],

'D': [0.5, 0.9, 2.1, 1.5, 0.5, 0.1]

}

df = pd.DataFrame(data)

df.pivot_table(index=["B"], columns=["C"], values=["A"], aggfunc=sum, margins=True)

输出:

A

C a b c d e f All

B

2014 1.0 NaN 2.0 3.0 NaN NaN 6

2015 NaN 2.0 NaN NaN 2.0 NaN 4

2017 NaN NaN NaN NaN NaN 4.0 4

All 1.0 2.0 2.0 3.0 2.0 4.0 14

2、交叉表

交叉表是一种用于计算分组频率的特殊透视表。通常使用crosstab函数来创建交叉表。

(1)crosstab的参数

pd.crosstab(index,columns,values=None,rownames=None

colnames=None,aggfunc=None,margins=False,dropna=True,normalize=False)

其中rownames可以设置行名,colnames可以设置列名,而且前两个参数可以是数组、Series或数组列表。

示例:

data = {'A': [1, 2, 2, 3, 2, 4],

'B': [2014, 2015, 2014, 2014, 2015, 2017],

'C': ["a", "b", "c", "d", "e", "f"],

'D': [0.5, 0.9, 2.1, 1.5, 0.5, 0.1]

}

df = pd.DataFrame(data)

pd.crosstab(index=[df["B"],df["A"]], columns=df["C"], values=df["A"], aggfunc=sum, margins=True)

输出:

C a b c d e f All

B A

2014 1 1.0 NaN NaN NaN NaN NaN 1

2 NaN NaN 2.0 NaN NaN NaN 2

3 NaN NaN NaN 3.0 NaN NaN 3

2015 2 NaN 2.0 NaN NaN 2.0 NaN 4

2017 4 NaN NaN NaN NaN NaN 4.0 4

All 1.0 2.0 2.0 3.0 2.0 4.0 14

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

juanqingcai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值