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:聚合统计、数据分箱、分组可视化的更多相关文章

  1. 数据分箱:等频分箱,等距分箱,卡方分箱,计算WOE、IV

    转载:https://zhuanlan.zhihu.com/p/38440477 转载:https://blog.csdn.net/starzhou/article/details/78930490 ...

  2. 五、Pandas玩转数据

    Series的简单运算 import numpy as np import pandas as pd s1=pd.Series([1,2,3],index=['A','B','C']) print(s ...

  3. 特征工程之分箱--Best-KS分箱

    变量的KS值 KS(Kolmogorov-Smirnov)用于模型风险区分能力进行评估,指标衡量的是好坏样本累计部分之间的差距 .KS值越大,表示该变量越能将正,负客户的区分程度越大.通常来说,KS& ...

  4. R语言︱噪声数据处理、数据分组——分箱法(离散化、等级化)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 分箱法在实际案例操作过程中较为常见,能够将一些 ...

  5. pandas聚合和分组运算——GroupBy技术(1)

    数据聚合与分组运算——GroupBy技术(1),有需要的朋友可以参考下. pandas提供了一个灵活高效的groupby功能,它使你能以一种自然的方式对数据集进行切片.切块.摘要等操作.根据一个或多个 ...

  6. pandas聚合和分组运算之groupby

    pandas提供了一个灵活高效的groupby功能,它使你能以一种自然的方式对数据集进行切片.切块.摘要等操作.根据一个或多个键(可以是函数.数组或DataFrame列名)拆分pandas对象.计算分 ...

  7. Atitit  数据存储的分组聚合 groupby的实现attilax总结

    Atitit  数据存储的分组聚合 groupby的实现attilax总结 1. 聚合操作1 1.1. a.标量聚合 流聚合1 1.2. b.哈希聚合2 1.3. 所有的最优计划的选择都是基于现有统计 ...

  8. Solr.NET快速入门(五)【聚合统计,分组查询】

    聚合统计 属性 说明 Min 最小值 Max 最大值 Sum 总和 Count 记录数,也就是多少行记录 Missing 结果集中,有多少条记录是空值 SumOfSquares 平方和(x1^2 + ...

  9. 小试牛刀ElasticSearch大数据聚合统计

    ElasticSearch相信有不少朋友都了解,即使没有了解过它那相信对ELK也有所认识E即是ElasticSearch.ElasticSearch最开始更多用于检索,作为一搜索的集群产品简单易用绝对 ...

随机推荐

  1. java继承时能包括静态的变量和方法吗?举例说明!

    子类继承了超类定义的所有实例变量和方法包括静态的变量和方法(马克-to-win见下例),并且为它自己增添了独特的元素.子类只能有一个超类.Java不支持多超类的继承. 子类拥有超类的所有成员,但它不能 ...

  2. uni-app中实现左侧导航栏效果

    HTML: 1 <view class="list"> 2 <!-- 一级 --> 3 <scroll-view class="list-l ...

  3. OpenHarmony 3.1 Beta版本关键特性解析——HiStreamer框架大揭秘

    ​(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点)​ 陈国栋 数字多媒体技术在过去的数十年里得到了飞速的发展,多媒体终端设备如智能音箱.智能门锁.智能手表广泛应用于人们 ...

  4. 省掉80%配置时间,这款Mock神器免费又好用

    前端的痛苦 作为前端,最痛苦的是什么时候? 每个迭代,需求文档跟设计稿都出来了,静态页面唰唰两天就做完了.可是做前端又不是简单地把后端吐出来的数据放到页面上就完了,还有各种前端处理逻辑啊. 后端接口还 ...

  5. 把图片存储 canvas原生API转成base64

    1.LocalStorage有什么用? 2.LocalStorage的普通用法以及如何存储图片. 首先介绍下什么是LocalStorage 它是HTML5的一种最新储存技术.但它只能储存字符串.以前的 ...

  6. Hoo Smart Chain 万物生长计划火热报名中,可视化公链迸发勃勃生机

    在DeFi越来越趋向同质化和静态化时,Hoo Smart Chain决定充当破局者,宣布决定All In元宇宙,并于2022年3月份开启面向全球去中心化开发者的奖励计划--「万物生长计划」 目前Ter ...

  7. 一行代码让你的项目轻松使用Dapr

    介绍 Dapr简化了云原生开发,让开发可以把焦点放在应用的业务逻辑上,从而让代码简单.可移植,那作为一个.Net开发者,我们也希望项目可以快速用上dapr,那究竟应该如何做呢? Dapr提出了Side ...

  8. 使用GO语言通过Stream Load实现Doris数据导入

    Doris github地址欢迎加Star apache/incubator-doris: Apache Doris(Incubating) is an MPP-based interactive S ...

  9. Python学习笔记: 用pprint更漂亮的打印数据

    pprint是一个标准库,它提供了pprint()函数 ,用来打印复杂数据时更漂亮 >>> from pprint import pprint >>> data = ...

  10. OSPF MTU问题

    OSFP(开放式最短路径优先)链路状态协议,IGP 1.mtu 检测 链路俩段不匹配 假设双方的mtu不一致时 ospf建立如下: R1与R2交互hello报文,其中包含:目的IP地址:224.0.0 ...