类似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()