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. python大佬养成计划----基于flask_sqlalchemy的网页显示数据库信息

    网页显示数据库信息 使用我们刚学习的flask_sqlalchemy,在网页中显示数据库表中的数据.在开始运行程序前,确保数据库中执行过创建表和创建用户的操作,详见链接描述. # 模板文件templa ...

  2. 各种类型的Dialog

    下面是几种对话框的效果 图一: 图二: 图三: 图四: 图五: 图六: 图七: 图1效果:该效果是当按返回按钮时弹出一个提示,来确保无误操作,采用常见的对话框样式. 代码: 创建对话框方法dialog ...

  3. Java中List接口重要实现类一ArrayList

    1.java.util.ArrayList 集合数据存储的结构是数组结构.元素查找快,而增删就比较慢 所以如果要查询数据,遍历数据,ArrayList是最常用的集合 2.ArrayList是不同步的, ...

  4. Leetcode216/39/40/77之回溯解决经典组合问题

    Leetcode216-组合总和三 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 .该列表不能包含相同的组合两 ...

  5. NodeJs学习日报day7——简单中间件

    const express = require('express') const app = express() const mw = function(req, resp, next) { cons ...

  6. 一篇文章带你搞懂InnoDB的索引|结合样例

    关注公众号[程序员白泽],带你走进一个不一样的程序员/学生党 前言 前阵子面试的时候,在第三面问到了MySQL索引相关的知识点,并且给出了一些SQL语句分析索引的执行情况.所以今天这篇文章给大家讲讲索 ...

  7. Ubuntu 百度飞桨和 CUDA 的安装

    Ubuntu 百度飞桨 和 CUDA 的安装 1.简介 本文主要是 Ubuntu 百度飞桨 和 CUDA 的安装 系统:Ubuntu 20.04 百度飞桨:2.2 为例 2.百度飞桨安装 访问百度飞桨 ...

  8. CVPR 2022数据集汇总|包含目标检测、多模态等方向

    前言 本文收集汇总了目前CVPR 2022已放出的一些数据集资源. 转载自极市平台 欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结.最新技术跟踪.经典论文解读.CV招聘信息. M5Produc ...

  9. 继承 & super & 方法覆盖

    简单继承 细节1: 细节2: 子类创建对象,先 父类构造器,后 子类的构造器,因为(默认的super) 细节3: 假设父类只有一个有参构造器,  此时需要子类用上super给定父类参数,才能通过编译 ...

  10. 《计算机组成原理/CSAPP》网课总结(一)

    现在是2022年4月17日晚10点,本月计划的网课<csapp讲解>视频课看到了第八章"异常"第三讲,视频讲的很好但更新很慢,暂时没有最新的讲解,所以先做一个简单总结. ...