python分组统计数据_数据分组统计
统计分析数据的时候,经常需要进⾏分组统计。分组操作在python⾥的实现⽅式就是groupby语句。
惯例,咱们先造⼀个DataFrame表。
import pandas as pd
dic={
'class':['a','a','b','b'],
'id':[1,2,3,3],
'math':[88,66,55,22],
'physics':[99,77,33,67],
'science':[55,88,65,89]
}
df1=pd.DataFrame(data=dic,index=['student1','student2','student3','student4'])
1、单列分组
groupby语句可以单独形成⼀个分组对象。⽐如我们将数据表按照班级(class)进⾏分组,
后续想要进⾏任何的分组统计都可以使⽤这个分组对象。
Class_upby('class')
an()
结果为:
id math physics science
class
a 1.5 77.0 88.0 71.5
b 3.0 38.5 50.0 77.0
出现这个结果是因为我们在分组统计的时候没有指定列,所以python会将所有数值的列统计出平均值展⽰出来。当我们指定需要统计的列名之后,就会只展⽰我们需要的列。
Class_an()
结果为:
class
a 77.0
b 38.5
Name: math, dtype: float64
分组对象也可以省略,直接得到我们需要的分组统计值,如:upby('class').an(),得到的结果是⼀样的。
2、多列分组
分组变量可以是单列也可以是多列,多列的时候需要加上中括号。
结果为:
math physics science
class id
a 1 88.0 99.0 55.0
2 66.0 77.0 88.0
b 3 38.5 50.0 77.0
3、分组变量成为列名⽽不是index
使⽤默认的groupby语句统计时,分组变量是作为结果DataFrame的index出现的。想要把分组变量从index挪出来成为单独⼀列,需要使⽤as_index语句。
结果为:
class id math physics science
groupby是什么函数0 a 1.5 77.0 88.0 71.5
1 b 3.0 38.5 50.0 77.0
我们指定分组变量不成为index后,python会将它做为列⽽新建⼀个从0开始编号的index。
4、不同的列应⽤不同的统计函数
想要实现这种操作需要agg函数,在agg函数内对不同的列指定不同的统计⽅法。
结果为:
math physics science
class
a 77.0 176 88
b 38.5 100 89
通过agg的⽅法,我们实现了对math求平均,对physics求和,对science取最⼤的操作。细⼼的同学可能发现我们求平均的操作⽤的是np.mean(numpy的操作),是因为agg并不⽀持直接的mean操作。
除了agg函数外,我们其实也可以⽤apply函数。只是应⽤apply函数时,是将分组对象内作为⼀个DataFrame来操作的。我们可以看看分组对象⾥⾯是什么。
for i in Class_group:
print(i)
结果为:
('a', class id math physics science
student1 a 1 88 99 55
student2 a 2 66 77 88)
('b', class id math physics science
student3 b 3 55 33 65

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。