list 分组求和_数据分析-python-分组聚合-2

本文主要目的:了解数据分组聚合,熟悉pivot_table函数,应用于数据处理,提高数据处理效率


f49309ef98a453e22a4895cb393bbbb2.png

同Excel数据透视表方法


在Excel中我们可以轻而易举地实现数据透视表功能,“插入——数据透视表——拖动选项——完成透视表”。

但数据达到一定量级时,Excel会无法支持,这时候Python中的pivot_table函数就能完美胜任,分组聚合不在话下,方便高效

首先,观看官方文档对pandas.pivot_table函数的解释:

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

fill_value: 空值的填充值;

dropna: 如果某列元素都为np.nan, 是否丢弃;

margins: 汇总列, margins_name: 汇总名称

margins参数默认为False,如果设置为True,会得到每列的汇总



下面,进行实战演练

  • 导入必要库
import pandas as pdimport numpy as np

  • 导入数据集
tips=pd.read_csv(r'C:甥敳獲AdministratorDesktopseaborn-data-masterips.csv')tips.head()---------------------结果:
5f8f173df516d0b85bcc28c2232cd550.png

图1


  • 先看下除data/index参数(这两参数必有)外无其他参数的数据透视
pd.pivot_table(tips,index=['day'])#默认求平均数#同#tips.groupby('day').mean()-------------------结果:
47e430cc72a6ce4986011203a52aeb7e.png

图2


  • 加入values参数进行数据透视
#values参数可以控制聚合的数值列pd.pivot_table(tips,index=['day'],values=['total_bill'])#同#tips[['total_bill','day']].groupby('day').mean(
e26b477ac45d99118aa26b845d8ed7e2.png

图3


  • 加入columns参数进行数据透视
#参数columns将允许我们定义一个或多个列#index与columns是离散型数据,分类数据,且两参数的列不能有重复pd.pivot_table(tips,index=['day','time'],values=['total_bill','tip'],columns=['sex'])--------------------------结果:
d2d6cb87030ce68d072a76119ef50b37.png

图4


  • 加入aggfunc参数进行数据透视(aggfunc可以用列表list或字典dic来设置)
#1、列表方式#这个参数决定你对数值的聚合计算方式,没加这参数默认的是对数据求平均数pd.pivot_table(tips,index=['day','time'],values=['total_bill','tip','size'],columns=['sex'],aggfunc=[np.sum])-----------------结果:
a8492e2f50a07b4850d311a4ce756510.png

图5

#2、字典方式(可以对不同列进行不同的函数聚合)pd.pivot_table(tips,index=['day','time'],columns=['sex'],values=['total_bill','tip','size'],aggfunc={'total_bill':np.sum,'tip':np.max,'size':np.min}----------------结果:
ba90c997b1fb3832d96e6dc4e80efbad.png

图6


  • 加入fill_value参数进行数据透视(对NaN的填充)
#对非数值(NaN)全部被填充为0pd.pivot_table(tips,index=['day','time'],columns=['sex'],values=['total_bill','tip','size'],aggfunc={'total_bill':np.sum,'tip':np.max,'size':np.min},fill_value=0)----------------------结果:
c32e430ffc50d8e901f7350e94bdc880.png

图7


  • 加入margins参数进行数据透视
#增加汇总列//使用参数margins。#margins默认为False,可以设置为True开启汇总列的计算#只对使用求和sum列增加汇总列pd.pivot_table(tips,index=['day','time'],columns=['sex'],values=['total_bill','tip','size'],aggfunc={'total_bill':np.sum,'tip':np.sum,'size':np.min},fill_value=0,margins=True)-----------------结果:
f1494fbec61cec317354bba02f22d608.png

图8


  • 延伸// 数据透视后的筛选
#1、首先将数据透视表保存到变量file中file=pd.pivot_table(tips,index=['day','time'],columns=['sex'],values=['total_bill','tip','size'],aggfunc={'total_bill':np.sum,'tip':np.sum,'size':np.min},fill_value=0,margins=True)
#2、然后查询筛选需要用到query函数#单个条件筛选file.query("day=='Fri'")----------------结果:
6768085089a4188df46fae5a027b4f91.png

图9

#多个条件筛选(query函数中,条件用括号含括,多个条件之间用&连接)file.query("(day=='Fri')&(time=='Dinner')")----------------结果:
03817efec043dc7ca9070371c2c2ba78.png

图10


总结:Python提供了分组聚合的高效函数pivot_table,同Excel数据透视表方式一样,但pivot_table函数在处理高量级数据是更优于Excel,工具是手段,提高数据处理效率是关键。



参考文献:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.pivot_table.html

数据集:如需请留言

寄语:厚积而薄发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值