《深入浅出Pandas:利用Python进行数据处理与分析》——第3部分 数据形式变化_01分组聚合
文章目录
- 分组聚合操作
- 分组器
- 分组对象查看
- apply/pipe/transform
- 数据分箱(data binning),或离散组合或数据分桶
- 分组可视化,pandas提供的简单的与分组相关的可视化方法
pandas数据分组、聚合和简单可视化操作和方法。
分组聚合操作
# Pandas分组聚合:数据的分组聚合操作
import pandas as pd
df = pd.read_excel("datasets/team.xlsx")
df.groupby(['team']).sum() # 分组、聚合[求和]操作
df.groupby(['team']).agg({'Q1':sum, 'Q2':max, 'Q3':min, 'Q4':'mean'}) # 应用不同的聚合计算方式
df.groupby(['team']).agg({'Q1':[sum,max, min], 'Q2':max, 'Q3':min, 'Q4':'mean'}) # 同一列应用多种聚合计算方法
# 分组过程,groupby按照指定字段对数据进行分组,生成分组器对象
df.groupby("team") # 单列分组
df.groupby(['team']) # 单列分组
df.groupby(['team', 'Q1']).sum() # 多列分组
# 分组对象的查看
group = df.groupby("team")
group.get_group('A') # 查看team为A的单个分组对象内容
# 分组依据也可传入函数,将数据分成多组【例如True和False两种】
def score(index):score = df.loc[index]['Q1':'Q4'].mean()if score >= 90:return 'A'elif score >= 80:return 'B'elif score >= 60:return 'C'else:return 'D'group = df.groupby(lambda x:score(x)) # 根据平均成绩分为四组
group['team'].count() # 各组数量
分组器
# 分组器Grouper,可以复用分组工作
df.groupby(pd.Grouper('team', sort=True), as_index=False).sum() # 分组字段不成为索引
df.groupby('team', sort=False).sum()
df.drop('name', axis=1) # 删除某列axis=1或者删除某行axis=0
分组对象查看
# 分组对象内容的查看,类似于字典的操作
df.groupby('team').groups # 全部数据,
df.groupby('team').groups.keys() # 分组名
df.groupby('team').groups.values() # 分组对象内容[行号]
df.groupby('team').get_group('A') # 选择某个分组数据
# indices返回一个字典
df.groupby('team').indices
# 迭代分组
for k,rf in df.groupby('team'):print(tf)
apply/pipe/transform
# apply,返回函数处理后的DataFrame
df.set_index('name').groupby('team').apply(lambda x:x['Q1'].sort_values(ascending=False).head(3)) # 选出按照team分组后,各组Q1成绩排行前三的呢
# 管道方法pipe,
df.groupby('team').pipe(lambda x: x.max() + x.min())
# 同理,apply实现:
df.groupby('team').apply(lambda x: x.max() + x.min())
# transform,与agg类似,但返回与原数据相同形状的DataFrame
df.groupby('team').transform('sum')
df.groupby('team').ngroup() # 分组序号
df.groupby('team').nth(1)
df.bfill() # 使用后一个值填充当前缺失值
df.shift(2) #数据移位
# 时间序列
df2 = pd.DataFrame(data={'a':[0,1]*50, 'b':1},index=pd.date_range('1/1/2020', periods=100, freq='t'))
# 时序重采样
df2.resample('3T').groups
数据分箱(data binning),或离散组合或数据分桶
是一种数据预处理技术,将原数据分成几个小区间,是一种量化操作。
落入给定区间的原数据值被代表该区间的值替换。
作用:平滑输入数据,在小数据集的情况下还可以减少过拟合。
pandas使用两个函数:pd.cut(指定分界点分箱数据)/pd.qcut(指定分箱数量等分数据)
# 定界分箱pd.cut
# 为便于比较分箱结果和原数据,使用assign链式编程, 默认左开右闭合
df.assign(bin_r=pd.cut(df.Q1, bins=[0,60,100])) # 指定分界点
# 分箱结果和分组groupby集合,和正常的分组操作类似,将分箱结果看为临时的列数据
df.groupby(pd.cut(df.Q1, bins=[0,60,100])).count() # 分箱结果分组数量统计(DataFrame)
df.Q1.groupby(pd.cut(df.Q1, bins=[0,60,100])).count() # 分箱结果分组数量统计(Series)
# 自定义分箱标签ins=[0,60,100], labels=False)) # 数字作为标签
df.assign(bin_r=pd.cut(df.Q1, bins=[0,60,100], labels=['及格','不及格'])) # 自定义
df.assign(bin_r=pd.cut(df.Q1, bins=[0,60,100], right=False)) # 左闭右开# 等宽分箱
df.assign(bin_r=pd.qcut(df.Q1, 4, precision=3)) # 等分成四个分箱
分组可视化,pandas提供的简单的与分组相关的可视化方法
# 基本的plot方法,默认折线图
df.set_index('name').groupby('team').plot()
结果:
team
A AxesSubplot(0.125,0.125;0.775x0.755)
B AxesSubplot(0.125,0.125;0.775x0.755)
C AxesSubplot(0.125,0.125;0.775x0.755)
D AxesSubplot(0.125,0.125;0.775x0.755)
E AxesSubplot(0.125,0.125;0.775x0.755)
dtype: object
图形结果:
df.set_index('name').groupby('team').hist() #直方图
df.set_index('name').groupby('team').boxplot() # 箱线图
《深入浅出Pandas:利用Python进行数据处理与分析》——第3部分 数据形式变化_01分组聚合相关推荐
- pythonallowpos_利用Python抓取并分析京东商品评论数据
2.1 内容简介 本章主要介绍如何利用Python抓取京东商城商品评论信息,并对这些评论信息进行分析和可视化.下面是要抓取的商品信息,一款女士文胸.这个商品共有红色,黑色和肤色等颜色, 70B到90D ...
- 深入浅出Pandas:利用Python进行数据处理与分析 (李庆辉) 读书笔记
1. 读取数据 df = pd.read_excel("地址",io, sheet_name=0, header=0, names=None, index_col=None, us ...
- 利用python进行股票技术分析--以茅台为例
""" 利用python进行股票技术分析–以茅台为例 通过下述策略对利用python进行股票技术分析,可以举一反三,并且能够实现复杂的技术分析策略,同时可以同python ...
- 如何利用python实现灰色关联分析?
1.灰色关联分析简介 灰色系统这个概念是相对于白色系统和黑色系统而言的.从控制论的知识里,颜色一般代表对于一个系统我们已知信息的多少,白色代表信息量充足,黑色代表我们其中的构造并不清楚的系统,而灰色介 ...
- python 表格格式输出_利用python对excel中一列的时间数据更改格式操作
问题场景:需要将下列的交期一列的数据格式更改成2019/05/10 存货编码 尺寸 数量 交期 0 K10Y0190000X B140 200 2019-05-10 00:00:00 1 K10Y01 ...
- python对excel数据更改_利用python对excel中一列的时间数据更改格式代码示例
本篇文章小编给大家分享一下利用python对excel中一列的时间数据更改格式代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 问题场景:需要将 ...
- 利用python爬取丁香医生上新型肺炎数据,并下载到本地,附带经纬度信息
新增:国外疫情网站介绍 已更新:爬取国外疫情数据 已更新:新型肺炎历史数据下载 2020年3月27日补充: 制作了一个全球肺炎数据查询下载网站,效果如下: 访问地址:http://119.3.227. ...
- python爬取电脑本地数据_利用python爬取丁香医生上新型肺炎数据,并下载到本地,附带经纬度信息...
原标题:利用python爬取丁香医生上新型肺炎数据,并下载到本地,附带经纬度信息 新型肺炎肆虐全国,可以预知,最近一两年地理学中会有一部分论文研究新型肺炎的空间分布及与其他指标的关联分析.获取其患病人 ...
- 利用python和Tushare自动更新A股每日数据
利用python和Tushare自动更新A股每日数据 tushare ID :423004 所需接口 整体思路为: 1.利用stock_basic获取ts_code,获得沪深全部上市公司股票代码 2. ...
最新文章
- WebAssembly 系列(五)为什么 WebAssembly 更快?
- xss实例-输出在script/script之间的情况
- 大话数据结构与算法:基础篇
- 华人学者黄皓两页证明解决计算机科学领域难题:布尔函数敏感度猜想
- 文案一方面需要创意,但一方面不需要过分沉溺于创意
- 编程之美读书笔记1.2——中国象棋将帅问题
- linux 高并发网络编程之epoll详解
- LexYacc 编译原理课设
- 前端视频截图的方法canvas.drawImage()
- vue2百度地图修改比例尺位置
- [大话设计模式C++版] 第7章 为别人做嫁衣 —— 代理模式
- 自己总结的linux命令
- 双11还没买过瘾?亚马逊“真黑五”全球狂欢登场
- 使用opengl es编写2d游戏的一些说明和技巧
- 电销机器人百度百科_从做百度百科看站长百态
- Buy Watermelon(思维题)
- flutter 使用flutter_app_badger推送通知消息清空问题
- [置顶] 不写周报才是一件很嘻哈的事
- 搭建代理IP池的方法
- 华为安卓手机记事本内容导出