当前位置:   article > 正文

Part15:Pandas怎样实现groupby分组统计_pandas按照某列进行分组,并且按照分组查询数据

pandas按照某列进行分组,并且按照分组查询数据

Pandas怎样实现groupby分组统计

类似SQL: select city,max(temperature) from city_weather group by city;

groupby:先对数据分组,然后在每个分组上应用聚合函数、转换函数

本次演示:

一、分组使用聚合函数做数据统计

二、遍历groupby的结果理解执行流程

三、实例分组探索天气数据

  1. import pandas as pd
  2. import numpy as np
  3. #在jupyter notebook中展示matplot图表
  4. %matplotlib inline
  1. df=pd.DataFrame({
  2. 'A':['foo','bar','foo','bar','foo','bar','foo','foo'],
  3. 'B':['one','one','two','three','one','one','two','three'],
  4. 'C':np.random.randn(8),
  5. 'D':np.random.randn(8)
  6. })
  7. df

一、分组使用聚合函数做数据统计

1、单个列groupby,查询所有数据列的统计

  1. P=df.groupby('A').sum()
  2. #聚合操作后P仍然是一个Dataframe
  3. P

df.groupby('name').sum()

Ps: 1、将name列的不同名称作为索引

  1. 2、忽略df中不是数字列的一列
  2. 3、对是数字列的一列进行累加
  3. 4、统计在name不同名称下的,其他值的和

2、多个列groupby,查询所有数据列的统计

df.groupby(['A','B']).mean()

 

1、选取A、B两列的不同名称作为索引---在这里因为A列的bar没有B列中的two所以没有

2、对数字列进行求取平均值

3、统计在不同名下的平均值

4、将A、B变成二级索引

  1. #设置as_index=False,取消A、B作为二级索引
  2. df.groupby(['A','B'],as_index=False).mean()

3、同时查看多种数据统计 

df.groupby('A').agg([np.sum,np.mean,np.std])

1、将name列的不同名称作为索引

  1. 2、忽略df中不是数字列的一列
  2. 3、对是数字列的一列进行操作
  3. 4、统计在name不同名称下的,其他值的和

列变成了多级索引

4、查看单列的结果数据统计

  1. #方法1:预过滤,性能更好
  2. df.groupby('A')['C'].agg([np.sum,np.mean,np.std])

 

  1. #方法2:
  2. df.groupby('A').agg([np.sum,np.mean,np.std])['C']

5、不同列使用不同的聚合函数 

  1. df.groupby('A').agg({
  2. 'C':np.sum,
  3. 'D':np.mean
  4. })

 

二、遍历groupby的结果理解执行流程

for循环可以直接遍历每个group

1、遍历单个列聚合的分组

  1. g=df.groupby('A')
  2. g
  3. #相当于对A索引的不同值的列进行一个汇总,使数据看起来更加的清晰
  1. for name,group in g:
  2. print(name)
  3. print(group)
  4. print( )

可以获取单个分组的数据 

g.get_group('bar')

2、遍历多个列聚合的分组 

  1. g=df.groupby(['A','B'])
  2. for name,group in g:
  3. print(name)
  4. print(group)
  5. print( )
  6. #name 是一个2个元素的元组,代表不同的列

可以直接查询group后的某几列,生成Series或者子DataFrame 

  1. g['C']
  2. for name,group in g:
  3. print(name)
  4. print(group)
  5. print( )

本质:所有的聚合统计,都是在dataframe和series上进行的

三、实例分组探索天气数据

  1. fpath='./datas/beijing_tianqi/beijing_tianqi_2018.csv'
  2. df=pd.read_csv(fpath)
  3. df

 

  1. #替换掉温度后缀℃
  2. df.loc[:,'bWendu']=df['bWendu'].str.replace('℃','')
  3. df.loc[:,'yWendu']=df['yWendu'].str.replace('℃','')
  4. df

  1. df2=df.drop(labels=['bWendu','yWendu'], axis=0, inplace=False)
  2. df2

  1. df2.loc[:,'bWendu']=df2['bWendu'].astype('int32')
  2. df2.loc[:,'yWendu']=df2['yWendu'].astype('int32')
  3. df2.head()

  1. #新增一列为月份
  2. df['month']=df['ymd'].str[:7]
  3. df.head()

 

 1、查看每个月的最高温度

  1. data=df.groupby('month')['bWendu'].max()
  2. data

  1. type(data)
  2. data=data.astype(float)
  3. data.plot()

 2、查看每个月的最高温度、最低温度、平均空气质量指数

  1. df.head()
  2. group_data=df.groupby('month').agg({'bWendu':np.max,'yWendu':np.min,'aqi':np.mean})
  3. group_data

 

group_data.plot()

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/161978
推荐阅读
相关标签
  

闽ICP备14008679号