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. 纯JS实现KeyboardNav(学习笔记)二

    纯JS实现KeyboardNav(学习笔记)二 这篇博客只是自己的学习笔记,供日后复习所用,没有经过精心排版,也没有按逻辑编写 这篇主要是添加css,优化js编写逻辑和代码排版 GitHub项目源码 ...

  2. vue配置请求转发解决跨域问题

    通过nodejs的请求转发到后台,前端地址:http://localhost:8080   后端地址:http://localhost:8081 vue.config.js内容如下: let prox ...

  3. hibernate 联合主键 composite-id

    如果表使用联合主键(一个表有两个以上的主键),你可以映射类的多个属性为标识符属性.如:<composite-id>元素接受<key-property> 属性映射(单表映射)和& ...

  4. Blazor组件自做三 : 使用JS隔离封装ZXing扫码

    Blazor组件自做三 : 使用JS隔离封装ZXing扫码 本文基础步骤参考前两篇文章 Blazor组件自做一 : 使用JS隔离封装viewerjs库 Blazor组件自做二 : 使用JS隔离制作手写 ...

  5. iOS开发 将html 富文本文字 转换成oc 的富文本

    - (NSMutableAttributedString *)mf_htmlAttribute:(NSString *)htmlString{ htmlString = [NSString strin ...

  6. Mybatis注解开发(一对一)

    其他代码访问:Mybatis注解开发基础操作 1.添加OrderMapper接口 public interface OrderMapper { // @Select("select *,o. ...

  7. 在vue项目中配置webpack

    首先我们来看一下使用Vue-cli2与Vue-cli2之后的版本(这里以Vue-cli4版本为例)创建项目目录结构的不同: Vue-cli2(左图)与Vue-cli4(右图)创建项目的目录 从上图可以 ...

  8. nodejs的tream(流)解析与模拟文件读写流源码实现

    什么是流? 可读流于可写流 双工流于转换流 背压机制与文件流模拟实现 一.什么是流? 关于流的概念早在1964年就有记录被提出了,简单的说"流"就是控制数据传输过程的程序,比如在那 ...

  9. HCIE笔记-第十节-静态路由

    协议 :标识 前方的目的网络 是通过什么协议形成的 优先级:代表形成路由的协议的优先级数值 [厂商规定] 开销值:代表该路由协议形成此路由时的开销 -- 不同的协议计算开销值的方式有区别(越小越优) ...

  10. Java语言学习day31--8月06日

    今日内容介绍1.正则表达式的定义及使用2.Date类的用法3.Calendar类的用法 ###01正则表达式的概念和作用 * A: 正则表达式的概念和作用 * a: 正则表达式的概述 * 正则表达式也 ...