Pandas数据分析—groupby分组统计

13.Pandas中groupby分组统计

文章目录

  • 13.Pandas中groupby分组统计
  • 前言
  • 一、分组使用聚合函数做数据统计
    • 1.准备数据
  • 二、遍历groupby的结果理解执行流程
  • 三、实例分组股票数据
  • 总结


前言

笔者最近正在学习Pandas数据分析,将自己的学习笔记做成一套系列文章。本节主要记录Pandas中groupby的使用(类似sql数据库中的groupby)

类似SQL:
select city,max(temperature) from city_weather group by city;
group:先对数据分组,然后再在每个分组上应用聚合函数、转换函数
本次演示:

  1. 分组使用聚合函数做数据统计
  2. 遍历groupby的结果理解执行的流程
  3. 实例分组探索天气数据

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

1.准备数据

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)
    
    }
)
df

Pandas数据分析—groupby分组统计_第1张图片

#1. 单个列groupby,查询所有数据列的统计
#我们容易看到:

#groupby中的'A'变成了数据的索引列
#因为要统计sum,但是B列不是数字,所以要被自动忽略掉
df.groupby('A').sum()

#2. 多个列groupby,查询所有数据列的统计
# 我们容易看到: ('A','B')成对变成了二级索引
df.groupby(['A','B']).mean()
df.groupby(['A','B'],as_index=False).mean()

#3.同时查看多种统计数据
#我们看到列就成为了多级的索引
df.groupby('A').agg([np.sum,np.mean,np.std])

#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})

Pandas数据分析—groupby分组统计_第2张图片
Pandas数据分析—groupby分组统计_第3张图片
Pandas数据分析—groupby分组统计_第4张图片
Pandas数据分析—groupby分组统计_第5张图片

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

#for循环可以直接遍历每个group
#1.遍历单个列聚合的分组
g=df.groupby('A')
g
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个元素的tuple,代表不同的列

g.get_group(('foo','one'))
#可以直接查询group后的某几列,生成Series或者子DataFrame
g['C']
for name,group in g['C']:
    print(name)
    print(group)
    print(type(group))
    print()
#其实所有的聚合统计,都是在dataframe和series上进行的

Pandas数据分析—groupby分组统计_第6张图片
Pandas数据分析—groupby分组统计_第7张图片
Pandas数据分析—groupby分组统计_第8张图片

三、实例分组股票数据

import pandas as pd
fpath="./datas/600033.csv"
df=pd.read_csv(fpath)
df.head()

#新增一列为vol的后两位
df['new']=df['vol']*100%100
df.head()

#查看每个同分组的最高温度
data=df.groupby('new')['open'].max()
data

type(data)
data.plot()

#查看每个分组开盘价的最高,收盘的最低,成交量的平均
df.head()
group_data=df.groupby('new').agg({'open': np.max,'close':np.min,'amount':np.mean})
group_data
group_data.plot()

Pandas数据分析—groupby分组统计_第9张图片
Pandas数据分析—groupby分组统计_第10张图片

Pandas数据分析—groupby分组统计_第11张图片

Pandas数据分析—groupby分组统计_第12张图片
Pandas数据分析—groupby分组统计_第13张图片

总结

这就是pandas的groupby基本用法了,希望可以帮助到你。

你可能感兴趣的:(pandas,python)