赞
踩
类似SQL: select city,max(temperature) from city_weather group by city;
groupby:先对数据分组,然后在每个分组上应用聚合函数、转换函数
一、分组使用聚合函数做数据统计
二、遍历groupby的结果理解执行流程
三、实例分组探索天气数据
- 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','one','one','two','three'],
- 'C':np.random.randn(8),
- 'D':np.random.randn(8)
- })
- df
1、单个列groupby,查询所有数据列的统计
- P=df.groupby('A').sum()
- #聚合操作后P仍然是一个Dataframe
- P
df.groupby('name').sum()
Ps: 1、将name列的不同名称作为索引
- 2、忽略df中不是数字列的一列
-
- 3、对是数字列的一列进行累加
-
- 4、统计在name不同名称下的,其他值的和
2、多个列groupby,查询所有数据列的统计
df.groupby(['A','B']).mean()
1、选取A、B两列的不同名称作为索引---在这里因为A列的bar没有B列中的two所以没有
2、对数字列进行求取平均值
3、统计在不同名下的平均值
4、将A、B变成二级索引
- #设置as_index=False,取消A、B作为二级索引
- df.groupby(['A','B'],as_index=False).mean()
3、同时查看多种数据统计
df.groupby('A').agg([np.sum,np.mean,np.std])
1、将name列的不同名称作为索引
- 2、忽略df中不是数字列的一列
-
- 3、对是数字列的一列进行操作
-
- 4、统计在name不同名称下的,其他值的和
列变成了多级索引
4、查看单列的结果数据统计
- #方法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、不同列使用不同的聚合函数
- df.groupby('A').agg({
- 'C':np.sum,
- 'D':np.mean
- })
for循环可以直接遍历每个group
1、遍历单个列聚合的分组
- g=df.groupby('A')
- g
- #相当于对A索引的不同值的列进行一个汇总,使数据看起来更加的清晰
- for name,group in g:
- print(name)
- print(group)
- print( )
可以获取单个分组的数据
g.get_group('bar')
2、遍历多个列聚合的分组
- g=df.groupby(['A','B'])
- for name,group in g:
- print(name)
- print(group)
- print( )
- #name 是一个2个元素的元组,代表不同的列
可以直接查询group后的某几列,生成Series或者子DataFrame
- g['C']
- for name,group in g:
- print(name)
- print(group)
- print( )
本质:所有的聚合统计,都是在dataframe和series上进行的
- fpath='./datas/beijing_tianqi/beijing_tianqi_2018.csv'
- df=pd.read_csv(fpath)
- df
- #替换掉温度后缀℃
- df.loc[:,'bWendu']=df['bWendu'].str.replace('℃','')
- df.loc[:,'yWendu']=df['yWendu'].str.replace('℃','')
- df
- df2=df.drop(labels=['bWendu','yWendu'], axis=0, inplace=False)
- df2
- df2.loc[:,'bWendu']=df2['bWendu'].astype('int32')
- df2.loc[:,'yWendu']=df2['yWendu'].astype('int32')
- df2.head()
- #新增一列为月份
- df['month']=df['ymd'].str[:7]
- df.head()
1、查看每个月的最高温度
- data=df.groupby('month')['bWendu'].max()
- data
- type(data)
- data=data.astype(float)
- data.plot()
2、查看每个月的最高温度、最低温度、平均空气质量指数
- df.head()
- group_data=df.groupby('month').agg({'bWendu':np.max,'yWendu':np.min,'aqi':np.mean})
- group_data
group_data.plot()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。