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. Vue-router实现单页面应用在没有登录情况下,自动跳转到登录页面

    这是我做前端一来的第一篇文章,都不知道该怎么开始了.那就直接奔主题吧.先讲讲这个功能的实现场景吧,我们小组使用vue全家桶实现了一个单页面应用,最初就考虑对登录状态做限制.比如登录后不能后退到登录页面 ...

  2. SVG vs Image, SVG vs Iconfont

    这可能是个别人写过很多次的话题,但貌似由于兼容性的原因?图标的显示还是用着 Iconfont 或者 CSS Sprite 的形式?希望通过自己新瓶装旧酒的方式能重新引导一下问题. SVG vs Ima ...

  3. 讲清楚之 javascript中的this

    讲清楚之 javascript中的this 这一节来探讨this. 在 javascript 中 this 也是一个神的存在,相对于 java 等语言在编译阶段确定,而在 javascript 中, ...

  4. c++字符串替换

    #include <string> #include <iostream> using namespace std; string m_replace(string strSr ...

  5. 如何在jsp界面进行判断再输出不同的值

    C标签的out <td> <c:if test="${nowtime eq returntime}"> <c:out value="逾期&q ...

  6. Java中的反射以及简单运用(原理+例子)

    Java反射 学习内容 1. 为什么要使用反射 2. 反射的概念 3. Java反射加载过程 4. 字节码对象理解 5. 获取字节码对象(.class)的三种方式 6. 反射常用API 8. 反射综合 ...

  7. CVE-2022-22947 SpringCloud GateWay SpEL RCE

    CVE-2022-22947 SpringCloud GateWay SpEL RCE 目录 CVE-2022-22947 SpringCloud GateWay SpEL RCE 写在前面 环境准备 ...

  8. 【UWP】实现一个波浪进度条

    好久没写 blog 了,一个是忙,另外一个是觉得没啥好写.废话不多说,直接上效果图: 可能看到这波浪线你觉得会很难,但看完这篇 blog 后应该你也会像我一样恍然大悟.图上的图形,我们可以考虑是由 3 ...

  9. Struts2-向值栈中存放数据

    1.第一种 获取值栈对象,调用值栈对象里面的set方法(该方法添加的是一个Map集合) //第一种方式,使用值栈对象获取对象里面的set方法 //1.获取值栈对象 ActionContext cont ...

  10. 用js实现倒计时效果

    首先获得两个时间的时间戳 var newdate = new Date('2021-01-22 21:25:00').getTime(); var olddate = new Date().getTi ...