Python数据分析pandas之分组统计透视表

数据聚合统计

Padans里的聚合统计即是应用分组的方法对数据框进行聚合统计,常见的有min(最小)、max(最大)、avg(平均值)、sum(求和)、var()、std(标准差)、百分位数、中位数等。

数据框概览

可以通过describe方法查看当前数据框里数值型的统计信息,主要包括条数、均值、标准差、最小值、25分位数、50分位数、75分位数、最大值方面的信息。

如果是查看某列的统计信息,在数据框下加“.”列名即可。

import pandas as pd
df2=pd.DataFrame([["李四",32,'A',90],["王二",19,'B',78],["王三",34,'C',55],["刘七",35,'A',91]],columns=['name','age','level','score'],index=['no_001','no_002','no_003','no_006'])
#查看所有数值列数据概况
print(df2.describe())
#查看age列的数据概况
print(df2.age.describe())
# 当然也可以指定percentiles,比如这里仅显示百分之30、50分位数。
# print(df2.describe(percentiles=[0.3,0.5]))
#结果age      score
count   4.000000   4.000000
mean   30.000000  78.500000
std     7.438638  16.743158
min    19.000000  55.000000
25%    28.750000  72.250000
50%    33.000000  84.000000
75%    34.250000  90.250000
max    35.000000  91.000000
count     4.000000
mean     30.000000
std       7.438638
min      19.000000
25%      28.750000
50%      33.000000
75%      34.250000
max      35.000000
Name: age, dtype: float64

单独查看统计信息

import pandas as pd
df2=pd.DataFrame([["李四",32,'A',90],["王二",19,'B',78],["王三",34,'C',55],["刘七",35,'A',91]],columns=['name','age','level','score'],index=['no_001','no_002','no_003','no_006'])
#查看所有数值列数据详情,分开统计
print(df2.age.count(),df2.age.mean(),df2.age.std(),df2.age.min(),df2.age.quantile(0.25),df2.age.quantile(0.5),df2.age.quantile(0.75),df2.age.sum())
#结果
4 30.0 7.438637868140466 19 28.75 33.0 34.25 120

按照某一列分组统计

#这里按照等级列进行分组,以求最大值为例,其它的聚合函数类似。import pandas as pd df2=pd.DataFrame([["李四",32,'A',90],["王二",19,'B',78],["王三",34,'C',55],["刘七",35,'A',91],["麻六",34,'A',83]],columns=['name','age','level','score'],index=['no_001','no_002','no_003','no_004','no_005'])
#查看等级列的聚合(最大值)情况
print(df2.groupby('level').max())
#结果
name  age  score
level
A       麻六   35     91
B       王二   19     78
C       王三   34     55

按照多列分组统计

多列(两列以上)分组统计,当前以等级、排名列为例,聚合函数是最大值(max)。

import pandas as pd df2=pd.DataFrame([["李四",32,'A',90,2,1500,300],["王二",19,'B',78,2,1300,200],["王三",34,'C',55,1,1250,235],["刘七",35,'A',91,3,1000,100],["麻六",34,'A',83,3,900,400]],columns=['name','age','level','score','rn','income','bouns'],index=['no_001','no_002','no_003','no_004','no_005']) # 按照默认列分组取最大值
#print(df2.groupby(['level','rn']).max())
##指定列(age)分组取最大值 print(df2.groupby(['level','rn']).age.max()) #print(df2.groupby(['level','rn'])['age'].max())#等同于上式
#结果name  age  score  income  bouns level rn                                 A     2    李四   32     90    1500    300       3    麻六   35     91    1000    400 B     2    王二   19     78    1300    200 C     1    王三   34     55    1250    235
level  rn
A      2     32        3     35
B      2     19
C      1     34
Name: age, dtype: int64

分组统计结合APPLY

通过APPLY结合lambda表达式生成新列,生成的对象是Series,如有需要可以转换为DataFrame。

import pandas as pd
df2=pd.DataFrame([["李四",32,'A',90,2,1500,300],["王二",19,'B',78,2,1300,200],["王三",34,'C',55,1,1250,235],["刘七",35,'A',91,3,1000,100],["麻六",34,'A',83,3,900,400]],columns=['name','age','level','score','rn','income','bouns'],index=['no_001','no_002','no_003','no_004','no_005'])
#通过APPLY结合lambda表达式生成新列
df_apply = pd.DataFrame(df2.groupby(['level', 'rn'], as_index=False).apply(lambda x: sum(x['income'])/sum(x['income']+x['bouns'])),columns=['rate'])
df_fin= df_apply.reset_index()
print(df_fin)
#结果,这里level和rn是索引。rate
level rn
A     2   0.833333       3   0.791667
B     2   0.866667
C     1   0.841751

分组统计结合APPLY与索引重建

通过APPLY结合lambda表达式生成新列,生成的对象是Series,因为groupby里的分组字段会转为索引,要变为列,需要通过reset_index方法。

import pandas as pd
df2=pd.DataFrame([["李四",32,'A',90,2,1500,300],["王二",19,'B',78,2,1300,200],["王三",34,'C',55,1,1250,235],["刘七",35,'A',91,3,1000,100],["麻六",34,'A',83,3,900,400]],columns=['name','age','level','score','rn','income','bouns'],index=['no_001','no_002','no_003','no_004','no_005'])
#通过APPLY结合lambda表达式生成新列
df_apply = pd.DataFrame(df2.groupby(['level', 'rn'], as_index=False).apply(lambda x: sum(x['income'])/sum(x['income']+x['bouns'])),columns=['rate'])
df_fin= df_apply.reset_index()
print(df_fin)
#结果level  rn      rate
0     A   2  0.833333
1     A   3  0.791667
2     B   2  0.866667
3     C   1  0.841751

透视表pivot_table

通过pivot_table实现以姓名(name)为索引,不同级别最小值(min)、收入(income)总和为列的交叉表。

import pandas as pd df2=pd.DataFrame([["李四",32,'A',90,2,1500,300],["王二",19,'B',78,2,1300,200],["王三",34,'C',55,1,1250,235],["刘七",35,'A',91,3,1000,100],["麻六",34,'A',83,3,900,400]],columns=['name','age','level','score','rn','income','bouns'],index=['no_001','no_002','no_003','no_004','no_005']) print(df2.pivot_table(index='name',columns=["level"],aggfunc={'age':max,'income':sum}))
#结果age    income level A     B     C       A       B       C
name
刘七     35.0   NaN   NaN  1000.0     NaN     NaN
李四     32.0   NaN   NaN  1500.0     NaN     NaN
王三      NaN   NaN  34.0     NaN     NaN  1250.0
王二      NaN  19.0   NaN     NaN  1300.0     NaN
麻六     34.0   NaN   NaN   900.0     NaN     NaN

Python数据分析pandas之分组统计透视表相关推荐

  1. Python数据分析——Pandas基础:dt.datetime与pivot_table()数据透视表

    系列文章目录 Chapter 1:创建与探索DF.排序.子集化:Python数据分析--Pandas基础入门+代码(一) Chapter 2:聚合函数,groupby,统计分析:Python数据分析- ...

  2. Python数据分析小技巧:如何在Pandas中实现数据透视表?

    Python数据分析小技巧:如何在Pandas中实现数据透视表? 数据透视表是数据分析中非常有用的工具,可以帮助我们快速了解数据的结构.关联和趋势.在Pandas中,我们可以使用pivot_table ...

  3. pandas数据处理实践五(透视表pivot_table、分组和透视表实战Grouper和pivot_table)

    建议大家多研究pandas的官方文档 透视表: DataFrame.pivot_table(values = None,index = None,columns = None,aggfunc ='me ...

  4. 利用excel与Pandas完成实现数据透视表(文末赠书)

         文末赠书 数据透视表是一种分类汇总数据的方法.本文章将会介绍如何用Pandas完成数据透视表的制作和常用操作. 1,制作数据透视表 制作数据透视表的时候,要确定这几个部分:行字段.列字段.数 ...

  5. 利用excel与Pandas完成实现数据透视表

    数据透视表是一种分类汇总数据的方法.本文章将会介绍如何用Pandas完成数据透视表的制作和常用操作. 1,制作数据透视表 制作数据透视表的时候,要确定这几个部分:行字段.列字段.数据区,汇总函数.数据 ...

  6. Python数据分析pandas之数据拼接与连接

    Python数据分析pandas之数据拼接与连接 数据拼接处理 数据拼接处理指的是numpy.pandas里对数据的拼接.连接.合并等多种方法的概称.有时我们处理的数据会分很多步骤,而中间或者最终的结 ...

  7. Python数据分析pandas之dataframe初识

    Python数据分析pandas之dataframe初识 声明与简介 pandas是一个基于python的.快速的.高效.灵活.易用的开源的数据处理.分析包(工具)..pandas构建在numpy之上 ...

  8. Python数据分析pandas之多层高维索引

    Python数据分析pandas之多层高维索引 DataFrame多层索引 多层索引简介 众所周知Pandas的Series和DataFrame存放的是一维和二维数组,那么想存放多维数组就得通过多层索 ...

  9. Python数据分析pandas之series初识

    Python数据分析pandas之series初识 声明与简介 pandas是一个基于python的.快速的.高效.灵活.易用的开源的数据处理.分析包(工具)..pandas构建在numpy之上,它通 ...

最新文章

  1. okhttp面试: Socket
  2. 面试官:Java中 serialVersionUID 的作用是什么?举个例子说明
  3. JSON数据的HTTP Header应该怎么标记?
  4. RabbitMQ的安装(linux篇)
  5. 阿里云面试官:如果是MySQL引起的CPU消耗过大,你会如何优化?
  6. NASA宣布发现 “第2个地球”
  7. jvm类加载器以及双亲委派
  8. eclipse安装web插件、安装centos版本的idea
  9. java线程交替执行_Java synchronized线程交替运行实现过程详解
  10. Android开发学习笔记:浅谈ToggleButton
  11. YII2框架 Gii生成CURD 的问题
  12. HDU2024 C语言合法标识符【入门】
  13. Nginx做反向代理的问题
  14. this关键字在构建错误实例时使用说明
  15. 大自然的印钞机农夫山泉是如何干过一群互联网与电商大佬的
  16. 友元函数实现复数加减法
  17. 如何查找重复文件并快速删除,电脑查重复文件的方法
  18. python 创建目录时间_python实现根据当前时间创建目录并输出日志
  19. HashMap、HashTable和ConcurrentHashMap的区别?
  20. linux date -s日期时间,linux下的date详解

热门文章

  1. Java 堆内存优化
  2. JavaScript实现最小公倍数LCM算法(附完整源码)
  3. OpenCASCADE绘制测试线束:图形命令之Axonometric观察器
  4. OpenCASCADE:建立Body
  5. wxWidgets:wxScrollBar类用法
  6. boost::spirit模块实现自定义用作容器数据的测试程序
  7. boost::process::async_pipe相关的测试程序
  8. boost::interprocess::anonymous_shared_memory用法的测试程序
  9. boost::gil::channel_traits用法的测试程序
  10. boost::fibers::launch::post的测试程序