pandas:聚合统计、数据分箱、分组可视化
1、聚合统计
1.1描述统计
#df.describe(),对数据的总体特征进行描述
df.groupby('team').describe()

df.groupby('team').describe().T #列数太多,进行转置

1.2统计函数
#对分组对象直接使用统计函数,分组内数据进行计算,返回df形式的数据
#计算平均数
df.groupby('team').mean()

#相关性系数
df.groupby('team').corr()

#每组的累计最大值
df.groupby('team').cummax()

1.3聚合方法agg()
将分组后的对象给定统计方法,支持按字段分别给定不同的统计方法
#所有列使用一个计算方法
df.groupby('team').agg(sum)

df.groupby('team').agg(np.size)

#一个字段使用多种统计方法,不同字段使用不同表达
grouped = df.groupby("team")
grouped[['Q1','Q2']].agg([np.sum,np.mean,np.std])

#不同列使用不同计算方法,且一个列用多个计算方法
df.groupby("team").agg({'Q1':['min','max'],'Q2':['sum']})

#agg()可以指定新列的名字,新列的名字为Mean,Sum
grouped.Q1.agg(Mean='mean',Sum='sum')

#Mean为Q1计算平均值,Sum为Q2计算和。
grouped.agg(Mean=('Q1','mean'),Sum=('Q2','sum'))

#如果列名不是有效的Python变量格式 比如列名是‘1_max’
grouped.agg(**{'1_max':pd.NamedAgg(column='Q1',aggfunc='max')})

#使用函数,分别传入每个分组的子df,按子df把这组所有的列组成的序列传到函数里进行计算,返回固定值
#lambda函数,所有方法都可以使用
def max_min(x):
return x.max()-x.min()
df.groupby('team').Q1.agg(Mean='mean',
Sum='sum',
Diff=lambda x: x.max()-x.min(),
Max_min=max_min)

1.4时序重采样resample()
针对时间序列数据,resample()将分组后的时间索引按周期进行聚合统计
#创建一组数据:
idx = pd.date_range('5/21/2022',periods=100,freq='T')
df2 = pd.DataFrame(data={'a':[0,1]*50,'b':1},index=idx)
df2

#索引为一个时序数据,按a列进行分组,按每20min对b进行求和
df2.groupby('a').resample('20T').sum()

df2.groupby('a').sum()

#以右边时间点为标识
df2.groupby('a').resample('3T',closed='right').sum()

#按月份为周期采样
df2.groupby('a').resample('M').sum()

1.5组内头尾值
#所有组的第一个值
df.groupby('team').first()

#最后一个值
grouped.last()

1.6组内分位数
#二分位数
grouped.quantile(0.5)
grouped.median()

1.7组内差值
grouped[['Q1','Q2','Q3','Q4']].diff().head(10)

2、数据分箱
数据分箱将原始数据分成几个小区间,即bin(小箱子)
落入给定区间的原始数据值 被 代表该区间的值 替换
可以有助于减少过拟合,平滑输入数据
pd.cut :指定分界点 pd.qcut :指定区间数量,等宽分箱处理
2.1定界分箱
#pd.cut指定区间,将数字进行划分
#将Q1成绩按0,60,100
pd.cut(df.Q1,bins=[0,60,100])
'''
```
0 (60, 100]
1 (0, 60]
2 (0, 60]
3 (60, 100]
4 (60, 100]
...
95 (0, 60]
96 (0, 60]
97 (60, 100]
98 (0, 60]
99 (0, 60]
Name: Q1, Length: 100, dtype: category
Categories (2, interval[int64]): [(0, 60] < (60, 100]]
```
'''
#将分箱结果应用到groupby分组
df.Q1.groupby(pd.cut(df.Q1,bins=[0,60,100])).count()
'''
```
Q1
(0, 60] 57
(60, 100] 43
Name: Q1, dtype: int64
```
'''
# DateFrame使用
df.groupby(pd.cut(df.Q1,bins=[0,60,100])).count()

# 显示了每个分组的数据
pd.cut(df.Q1,bins=[0,60,100],labels=['不及格','及格'])
pd.cut(df.Q1,bins=[0,60,100],labels=['不及格','及格']).count()
'''
```
0 及格
1 不及格
2 不及格
3 及格
4 及格
...
95 不及格
96 不及格
97 及格
98 不及格
99 不及格
Name: Q1, Length: 100, dtype: category
Categories (2, object): ['不及格' < '及格']
```
'''
2.2等宽分箱
#按Q1成绩分为两组
pd.qcut(df.Q1,q=2)
'''
```
0 (51.5, 98.0]
1 (0.999, 51.5]
2 (51.5, 98.0]
3 (51.5, 98.0]
4 (51.5, 98.0]
...
95 (0.999, 51.5]
96 (0.999, 51.5]
97 (51.5, 98.0]
98 (0.999, 51.5]
99 (0.999, 51.5]
Name: Q1, Length: 100, dtype: category
Categories (2, interval[float64]): [(0.999, 51.5] < (51.5, 98.0]]
```
'''
#查看分组区间
pd.qcut(df.Q1,q=2).unique()
'''
```
[(51.5, 98.0], (0.999, 51.5]]
Categories (2, interval[float64]): [(0.999, 51.5] < (51.5, 98.0]]
```
'''
#应用到分组中:
#series使用
df.Q1.groupby(pd.qcut(df.Q1,q=2)).count()
'''
```
Q1
(0.999, 51.5] 50
(51.5, 98.0] 50
Name: Q1, dtype: int64
```
'''
#DateFrame使用
df.groupby(pd.qcut(df.Q1,q=2)).count()

#指定标签名
pd.qcut(range(5),3,labels=['good','medium','bad'])
'''
```
['good', 'good', 'medium', 'bad', 'bad']
Categories (3, object): ['good' < 'medium' < 'bad']
```
'''
#返回箱子标签
pd.qcut(df.Q1,q=2,retbins=True)
3、分组可视化
3.1绘图方法
#分组,设置索引为name
grouped = df.set_index('name').groupby('team')
grouped.plot()

3.2直方图hist()
#绘制直方图
grouped.hist()

3.3箱线图boxplot()
分组箱线图
grouped.boxplot(figsize=(15,12))

分组箱线图,按team分组并返回箱线图
df.boxplot(by='team',figsize=(15,10))

pandas:聚合统计、数据分箱、分组可视化的更多相关文章
- 数据分箱:等频分箱,等距分箱,卡方分箱,计算WOE、IV
转载:https://zhuanlan.zhihu.com/p/38440477 转载:https://blog.csdn.net/starzhou/article/details/78930490 ...
- 五、Pandas玩转数据
Series的简单运算 import numpy as np import pandas as pd s1=pd.Series([1,2,3],index=['A','B','C']) print(s ...
- 特征工程之分箱--Best-KS分箱
变量的KS值 KS(Kolmogorov-Smirnov)用于模型风险区分能力进行评估,指标衡量的是好坏样本累计部分之间的差距 .KS值越大,表示该变量越能将正,负客户的区分程度越大.通常来说,KS& ...
- R语言︱噪声数据处理、数据分组——分箱法(离散化、等级化)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 分箱法在实际案例操作过程中较为常见,能够将一些 ...
- pandas聚合和分组运算——GroupBy技术(1)
数据聚合与分组运算——GroupBy技术(1),有需要的朋友可以参考下. pandas提供了一个灵活高效的groupby功能,它使你能以一种自然的方式对数据集进行切片.切块.摘要等操作.根据一个或多个 ...
- pandas聚合和分组运算之groupby
pandas提供了一个灵活高效的groupby功能,它使你能以一种自然的方式对数据集进行切片.切块.摘要等操作.根据一个或多个键(可以是函数.数组或DataFrame列名)拆分pandas对象.计算分 ...
- Atitit 数据存储的分组聚合 groupby的实现attilax总结
Atitit 数据存储的分组聚合 groupby的实现attilax总结 1. 聚合操作1 1.1. a.标量聚合 流聚合1 1.2. b.哈希聚合2 1.3. 所有的最优计划的选择都是基于现有统计 ...
- Solr.NET快速入门(五)【聚合统计,分组查询】
聚合统计 属性 说明 Min 最小值 Max 最大值 Sum 总和 Count 记录数,也就是多少行记录 Missing 结果集中,有多少条记录是空值 SumOfSquares 平方和(x1^2 + ...
- 小试牛刀ElasticSearch大数据聚合统计
ElasticSearch相信有不少朋友都了解,即使没有了解过它那相信对ELK也有所认识E即是ElasticSearch.ElasticSearch最开始更多用于检索,作为一搜索的集群产品简单易用绝对 ...
随机推荐
- java继承时能包括静态的变量和方法吗?举例说明!
子类继承了超类定义的所有实例变量和方法包括静态的变量和方法(马克-to-win见下例),并且为它自己增添了独特的元素.子类只能有一个超类.Java不支持多超类的继承. 子类拥有超类的所有成员,但它不能 ...
- uni-app中实现左侧导航栏效果
HTML: 1 <view class="list"> 2 <!-- 一级 --> 3 <scroll-view class="list-l ...
- OpenHarmony 3.1 Beta版本关键特性解析——HiStreamer框架大揭秘
(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 陈国栋 数字多媒体技术在过去的数十年里得到了飞速的发展,多媒体终端设备如智能音箱.智能门锁.智能手表广泛应用于人们 ...
- 省掉80%配置时间,这款Mock神器免费又好用
前端的痛苦 作为前端,最痛苦的是什么时候? 每个迭代,需求文档跟设计稿都出来了,静态页面唰唰两天就做完了.可是做前端又不是简单地把后端吐出来的数据放到页面上就完了,还有各种前端处理逻辑啊. 后端接口还 ...
- 把图片存储 canvas原生API转成base64
1.LocalStorage有什么用? 2.LocalStorage的普通用法以及如何存储图片. 首先介绍下什么是LocalStorage 它是HTML5的一种最新储存技术.但它只能储存字符串.以前的 ...
- Hoo Smart Chain 万物生长计划火热报名中,可视化公链迸发勃勃生机
在DeFi越来越趋向同质化和静态化时,Hoo Smart Chain决定充当破局者,宣布决定All In元宇宙,并于2022年3月份开启面向全球去中心化开发者的奖励计划--「万物生长计划」 目前Ter ...
- 一行代码让你的项目轻松使用Dapr
介绍 Dapr简化了云原生开发,让开发可以把焦点放在应用的业务逻辑上,从而让代码简单.可移植,那作为一个.Net开发者,我们也希望项目可以快速用上dapr,那究竟应该如何做呢? Dapr提出了Side ...
- 使用GO语言通过Stream Load实现Doris数据导入
Doris github地址欢迎加Star apache/incubator-doris: Apache Doris(Incubating) is an MPP-based interactive S ...
- Python学习笔记: 用pprint更漂亮的打印数据
pprint是一个标准库,它提供了pprint()函数 ,用来打印复杂数据时更漂亮 >>> from pprint import pprint >>> data = ...
- OSPF MTU问题
OSFP(开放式最短路径优先)链路状态协议,IGP 1.mtu 检测 链路俩段不匹配 假设双方的mtu不一致时 ospf建立如下: R1与R2交互hello报文,其中包含:目的IP地址:224.0.0 ...