Part15:Pandas怎样实现groupby分组统计

Pandas怎样实现groupby分组统计

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

 

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

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

 

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏天的学习日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值