类似SQL:
select city,max(temperature) from city_weather group by city;
groupby:先对数据分组,然后在每个分组上应用聚合函数、转换函数
本次演示:
一、分组使用聚合函数做数据统计
二、遍历groupby的结果理解执行流程
三、实例分组探索天气数据
1、创建数据和导入包
1
2
3
4
5
6
7
8
9
|
import pandas as pd import numpy as np # 加上这一句,能在jupyter notebook展示matplot图表 % matplotlib inline df = pd.DataFrame({ 'A' : [ 'foo' , 'bar' , 'foo' , 'bar' , 'foo' , 'bar' , 'foo' , 'foo' ], 'B' : [ 'one' , 'one' , 'two' , 'three' , 'two' , 'two' , 'one' , 'three' ], 'C' : np.random.randn( 8 ), 'D' : np.random.randn( 8 )}) |
2、分组使用聚合函数做数据统计
1、单个列groupby,查询所有数据列的统计
1
|
df.groupby( 'A' ). sum () |
groupby中的’A’变成了数据的索引列
因为要统计sum,但B列不是数字,所以被自动忽略掉
2、多个列groupby,查询所有数据列的统计
1
|
df.groupby([ 'A' , 'B' ]).mean() |
我们看到:(‘A’,‘B’)成对变成了二级索引
1
|
df.groupby([ 'A' , 'B' ], as_index = False ).mean() #这会使得A、B两列不会成为二级索引 |
3、同时查看多种数据统计
1
|
df.groupby( 'A' ).agg([np. sum , np.mean, np.std]) #列变成了多级索引 |
4、查看单列的结果数据统计
1
2
3
4
5
|
# 方法1:预过滤,性能更好 df.groupby( 'A' )[ 'C' ].agg([np. sum , np.mean, np.std]) # 方法2 df.groupby( 'A' ).agg([np. sum , np.mean, np.std])[ 'C' ] |
5、不同列使用不同的聚合函数
1
|
df.groupby( 'A' ).agg({ "C" :np. sum , "D" :np.mean}) |
3、遍历groupby的结果理解执行流程
for循环可以直接遍历每个group
1、遍历单个列聚合的分组
1
2
3
4
5
|
g = df.groupby( 'A' ) for name,group in g: print (name) print (group) |
可以获取单个分组的数据
1
|
g.get_group( 'bar' ) |
2、遍历多个列聚合的分组
1
2
3
4
5
|
g = df.groupby([ 'A' , 'B' ]) for name,group in g: print (name) print (group) print () |
name是一个2个元素的tuple,代表不同的列
1
|
g.get_group(( 'foo' , 'one' )) #可以获取单个分组的数据 |
可以直接查询group后的某几列,生成Series或者子DataFrame
1
2
3
4
5
6
7
|
g[ 'C' ] for name, group in g[ 'C' ]: print (name) print (group) print ( type (group)) print () |
其实所有的聚合统计,都是在dataframe和series上进行的
4、实例分组探索天气数据
1
2
3
4
5
6
7
8
9
|
fpath = "./datas/beijing_tianqi/beijing_tianqi_2018.csv" df = pd.read_csv(fpath) # 替换掉温度的后缀℃ df.loc[:, "bWendu" ] = df[ "bWendu" ]. str .replace( "℃" , "").astype( 'int32' ) df.loc[:, "yWendu" ] = df[ "yWendu" ]. str .replace( "℃" , "").astype( 'int32' ) df.head() # 新增一列为月份 df[ 'month' ] = df[ 'ymd' ]. str [: 7 ] df.head() |
1、查看每个月的最高温度
1
2
3
|
data = df.groupby( 'month' )[ 'bWendu' ]. max () data data.plot() #绘图 |
2、查看每个月的最高温度、最低温度、平均空气质量指数
1
2
|
group_data = df.groupby( 'month' ).agg({ "bWendu" :np. max , "yWendu" :np. min , "aqi" :np.mean}) group_data.plot() |
到此这篇关于Pandas实现groupby分组统计的实践的文章就介绍到这了,更多相关Pandas groupby分组统计内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/qq_41706810/article/details/105960139