dataframe groupby_Pandas 数据聚合与分组运算[groupby+apply]速查笔记

利用Pandas将数据进行分组,并将各组进行聚合或自定义函数处理。

e16d19df82f2c2d894f31617b02904c5.png
Pandas中Groupby分组与聚合过程

导入模块

import pandas as pd

缩写

df表示Dataframe对象

分组

  • df.groupby('col1'): 根据col1列将df全部列分组(默认:axis=0行)
  • df['col2'].groupby('col1'): 根据col1列对df中col2列分组
    • =df['col2'].groupby(df['col1'])
    • =df.groupby('col1')[['col2']]
    • =df.groupby('col1')['col2']
  • df.groupby(['col1','col2']): 根据col1,col2列将df分组
  • dict(list(df.groupby('col1'))): 将分组存为key为组名,value为group的字典
  • for name,group in df.groupby('col1'): 遍历分组名+组
  • for (n1,n2),group in df.groupby(['col1','col2']): 遍历取层级分组名+组
  • df.groupby(df.types, axis=1): 根据数据类型对df列分组
  • df.groupby(dict/list,axis=1):以字典或列表对df各列分组
    • dict中key为列名,value为分类标签,根据分类标签将列分类
  • df.groupby(len):计算df索引值的字符串长度,以长度值为分组及组名
  • df.groupby([len,list]):混和使用,层次化索引(0层:len,1层,list)
  • df.groupby(level='num',axis=1):层次化索引df中,以索引层名为num的列分组
  • groupby(group_keys=False): 分组列不成为索引
    • =reset_index()

聚合

>>>grouped = df.groupby('col1')

  • grouped.mean() :分组计算均值
    • grouped.agg('mean'):同上
  • grouped.size():分组大小
  • grouped.count():分组中非NA的数量
  • grouped.median():分组中位数
  • grouped.std():分组无偏标准差(分母n-1)
  • grouped.var():分组无偏方差
  • grouped.min():非NA最小值
  • grouped.max():非NA最大值
  • grouped.prod():非NA值的积
  • grouped.first():第一个非NA值
  • grouped.last():最后一个非NA值
  • grouped('col2').quantile(0.5):以col2列的0.5分位数聚合

自定义函数

  • grouped.agg(func):以自定义的func函数聚合
    • func 是以sereis为基础的操作
    • 默认聚合后的列名为func名
      • grouped.agg([(name,func)]):指定列名,不用func名
    • =grouped.aggregate(func)
  • grouped[col].agg([func1,‘mean','std',...,funcn]): 对分组列col使用多个聚合函数
  • grouped[col1,col2].agg([func1,funcn]): 分组后的多列使用多个聚合函数
  • grouped.agg({col:func1,col2:func2}): 对col1列用func1聚合,col2列用func2聚合

分组级运算

本质:将一维数组简化为标量值的函数

  • grouped.transform(func): 将聚合的标量值广播
  • grouped.apply(func,param1,param2....): 对各个分组列使用func函数,param是func的参数
  • groupby + pd.cut : 将数据分为等距区间分组
  • groupby + pd.qcut: 将数据根据分位数区间分组

透视表与交叉表

  • df.pivot_table() : 透视表
    • rows:行索引
    • cols:列索引
    • margins:总计行列数据,默认平均值
    • fill_value:填补缺失值
  • pd.crosstab(df.col1,df.col2) : 交叉表计算分组频率的特殊透视表
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值