1、聚合统计

1.1描述统计

  1. #df.describe(),对数据的总体特征进行描述
  2. df.groupby('team').describe()

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

1.2统计函数

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

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

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

1.3聚合方法agg()

将分组后的对象给定统计方法,支持按字段分别给定不同的统计方法

  1. #所有列使用一个计算方法
  2. df.groupby('team').agg(sum)

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

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

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

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

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

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

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

1.4时序重采样resample()

针对时间序列数据,resample()将分组后的时间索引按周期进行聚合统计

  1. #创建一组数据:
  2. idx = pd.date_range('5/21/2022',periods=100,freq='T')
  3. df2 = pd.DataFrame(data={'a':[0,1]*50,'b':1},index=idx)
  4. df2

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

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

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

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

1.5组内头尾值

  1. #所有组的第一个值
  2. df.groupby('team').first()

  1. #最后一个值
  2. grouped.last()

1.6组内分位数

  1. #二分位数
  2. grouped.quantile(0.5)
  3. grouped.median()

1.7组内差值

  1. grouped[['Q1','Q2','Q3','Q4']].diff().head(10)

2、数据分箱

数据分箱将原始数据分成几个小区间,即bin(小箱子)

落入给定区间的原始数据值 被 代表该区间的值 替换

可以有助于减少过拟合,平滑输入数据

pd.cut :指定分界点 pd.qcut :指定区间数量,等宽分箱处理

2.1定界分箱

  1. #pd.cut指定区间,将数字进行划分
  2. #将Q1成绩按0,60,100
  3. pd.cut(df.Q1,bins=[0,60,100])
  4. '''
  5. ```
  6. 0 (60, 100]
  7. 1 (0, 60]
  8. 2 (0, 60]
  9. 3 (60, 100]
  10. 4 (60, 100]
  11. ...
  12. 95 (0, 60]
  13. 96 (0, 60]
  14. 97 (60, 100]
  15. 98 (0, 60]
  16. 99 (0, 60]
  17. Name: Q1, Length: 100, dtype: category
  18. Categories (2, interval[int64]): [(0, 60] < (60, 100]]
  19. ```
  20. '''
  21. #将分箱结果应用到groupby分组
  22. df.Q1.groupby(pd.cut(df.Q1,bins=[0,60,100])).count()
  23. '''
  24. ```
  25. Q1
  26. (0, 60] 57
  27. (60, 100] 43
  28. Name: Q1, dtype: int64
  29. ```
  30. '''
  31. # DateFrame使用
  32. df.groupby(pd.cut(df.Q1,bins=[0,60,100])).count()

  1. # 显示了每个分组的数据
  2. pd.cut(df.Q1,bins=[0,60,100],labels=['不及格','及格'])
  3. pd.cut(df.Q1,bins=[0,60,100],labels=['不及格','及格']).count()
  4. '''
  5. ```
  6. 0 及格
  7. 1 不及格
  8. 2 不及格
  9. 3 及格
  10. 4 及格
  11. ...
  12. 95 不及格
  13. 96 不及格
  14. 97 及格
  15. 98 不及格
  16. 99 不及格
  17. Name: Q1, Length: 100, dtype: category
  18. Categories (2, object): ['不及格' < '及格']
  19. ```
  20. '''

2.2等宽分箱

  1. #按Q1成绩分为两组
  2. pd.qcut(df.Q1,q=2)
  3. '''
  4. ```
  5. 0 (51.5, 98.0]
  6. 1 (0.999, 51.5]
  7. 2 (51.5, 98.0]
  8. 3 (51.5, 98.0]
  9. 4 (51.5, 98.0]
  10. ...
  11. 95 (0.999, 51.5]
  12. 96 (0.999, 51.5]
  13. 97 (51.5, 98.0]
  14. 98 (0.999, 51.5]
  15. 99 (0.999, 51.5]
  16. Name: Q1, Length: 100, dtype: category
  17. Categories (2, interval[float64]): [(0.999, 51.5] < (51.5, 98.0]]
  18. ```
  19. '''
  20. #查看分组区间
  21. pd.qcut(df.Q1,q=2).unique()
  22. '''
  23. ```
  24. [(51.5, 98.0], (0.999, 51.5]]
  25. Categories (2, interval[float64]): [(0.999, 51.5] < (51.5, 98.0]]
  26. ```
  27. '''
  28. #应用到分组中:
  29. #series使用
  30. df.Q1.groupby(pd.qcut(df.Q1,q=2)).count()
  31. '''
  32. ```
  33. Q1
  34. (0.999, 51.5] 50
  35. (51.5, 98.0] 50
  36. Name: Q1, dtype: int64
  37. ```
  38. '''
  39. #DateFrame使用
  40. df.groupby(pd.qcut(df.Q1,q=2)).count()

  1. #指定标签名
  2. pd.qcut(range(5),3,labels=['good','medium','bad'])
  3. '''
  4. ```
  5. ['good', 'good', 'medium', 'bad', 'bad']
  6. Categories (3, object): ['good' < 'medium' < 'bad']
  7. ```
  8. '''
  9. #返回箱子标签
  10. pd.qcut(df.Q1,q=2,retbins=True)

3、分组可视化

3.1绘图方法

  1. #分组,设置索引为name
  2. grouped = df.set_index('name').groupby('team')
  3. grouped.plot()

3.2直方图hist()

  1. #绘制直方图
  2. 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. 解决Mui中popover 顶部弹出菜单弹出位置不准确以及无法收回的问题

    前言 最近公司的项目转向使用Hbuilder开发移动端项目,其中想要通过在顶部标题栏加入弹出菜单的方式,来定位长列表的位置,如图所示. 问题 Mui的功能貌似还不是很完善,在使用这个弹出菜单的时候,发 ...

  2. 【Android开发】URL 转义与反转义

    1,转义 @org.junit.Test public void testEncode(){ String url="http://192.168.0.19:8888/cas/login&q ...

  3. vue后台管理系统组件弹窗

    //addFormVisibleIcon可在data中设置true与falsehttps://element.eleme.io/#/zh-CN/component/installation <e ...

  4. 安卓记账本开发学习day1

    学习了一些简单的布局与界面设计

  5. Java学习day22

    今天跟着视频学习了JScroll面板,图片按钮以及单多选框 这是一个图片按钮程序 很多网站还有软件的图标兼容按钮的功能,如果只有button是无法实现该功能的这时候就需要使用到图标按钮 文本框没有办法 ...

  6. ctx.createCircularGradient is not a function

       正确      const grd = ctx.createCircularGradient(75, 50, 50)     grd.addColorStop(0, 'red')     grd ...

  7. hutool工具类常用API整理

    0.官网学习地址 https://www.hutool.cn/ 1.依赖 <dependency> <groupId>cn.hutool</groupId> < ...

  8. c#中判断类是否继承于泛型基类

    在c#中,有时候我们会编写类似这样的代码: public class a<T> { //具体类的实现 } public class b : a<string>{} 如果b继承a ...

  9. HCNP Routing&Switching之组播技术PIM-SM 稀疏模式

    前文我们了解了组播路由协议PIM以及PIM-DM密集模式相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16084310.html:今天我们来聊一聊PI ...

  10. 2021.07.19 P2294 狡猾的商人(差分约束)

    2021.07.19 P2294 狡猾的商人(差分约束) [P2294 HNOI2005]狡猾的商人 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.差分约束最长路与最短 ...