DataFrame.groupby()所见的各种用法详解


Posted in Python onJune 14, 2020

groupby的函数定义:

DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)

  • by :接收映射、函数、标签或标签列表;用于确定聚合的组。
  • axis : 接收 0/1;用于表示沿行(0)或列(1)分割。
  • level : 接收int、级别名称或序列,默认为None;如果轴是一个多索引(层次化),则按一个或多个特定级别分组。
  • as_index:接收布尔值,默认Ture;Ture则返回以组标签为索引的对象,False则不以组标签为索引。

其他的参数解释就看文档吧:链接:pandas.DataFrame.groupby 介绍文档

所见 1 :日常用法

import pandas as pd

df = pd.DataFrame({'Gender' : ['男', '女', '男', '男', '男', '男', '女', '女', '女'],
          'name' : ['周杰伦', '蔡依林', '林俊杰', '周杰伦', '林俊杰', '周杰伦', '田馥甄', '蔡依林', '田馥甄'],
          'income' : [4.5, 2.9, 3.8, 3.7, 4.0, 4.1, 1.9, 4.1, 3.2],
         'expenditure' : [1.5, 1.9, 2.8, 1.7, 4.1, 2.5, 1.1, 3.4, 1.2]
         })
#根据其中一列分组
df_expenditure_mean = df.groupby(['Gender']).mean()

#根据其中两列分组
df_expenditure_mean = df.groupby(['Gender', 'name']).mean()

#只对其中一列求均值
df_expenditure_mean = df.groupby(['Gender', 'name'])['income'].mean()

输出示例:

DataFrame.groupby()所见的各种用法详解

 所见 2 :解决groupby.sum() 后层级索引levels上移的问题

上图中的输出二,虽然是 DataFrame 的格式,但是若需要与其他表匹配的时候,这个格式就有些麻烦了。匹配数据时,我们需要的数据格式是:列名都在第一行,数据行中也不能有 Gender 列这样的合并单元格。因此,我们需要做一些调整,将 as_index 改为 False ,默认是 Ture 。

#不以组标签为索引,通过 as_index 来实现
df_expenditure_mean = df.groupby(['Gender', 'name'], as_index=False).mean()

输出:

DataFrame.groupby()所见的各种用法详解

所见 3 :解决groupby.apply() 后层级索引levels上移的问题

在所见 2 中我们知道,使用参数 as_index 就可使 groupby 的结果不以组标签为索引,但是后来在使用 groupby.apply() 时发现,as_index 参数失去了效果。如下例所示:

# 使用了 as_index=False,但是从输出结果中可见没起到作用
df_apply = df.groupby(['Gender', 'name'], as_index=False).apply(lambda x: sum(x['income']-x['expenditure'])/sum(x['income']))
df_apply = pd.DataFrame(df_apply,columns=['存钱占比'])#转化成dataframe格式

输出:

DataFrame.groupby()所见的各种用法详解

解决办法: 加一句df_apply_index = df_apply.reset_index()

# 加一句df_apply_index = df_apply.reset_index()
df_apply = df.groupby(['Gender', 'name'], as_index=False).apply(lambda x: sum(x['income']-x['expenditure'])/sum(x['income']))
df_apply = pd.DataFrame(df_apply,columns=['存钱占比'])#转化成dataframe格式
df_apply_index = df_apply.reset_index()

输出:

DataFrame.groupby()所见的各种用法详解

所见 4 :groupby函数的分组结果保存成DataFrame

所见 1 中的输出三,明显是  Series ,我们需要将其转化为 DataFrame 格式的数据。

#只对其中一列求均值,并转化为 DataFrame
df_expenditure_mean = df.groupby(['Gender', 'name'], as_index=False)['income'].mean()
df_expenditure_mean = pd.DataFrame(df_expenditure_mean)#转化成dataframe格式
df_expenditure_mean.rename(columns={'income':'收入均值'}, inplace = True)

输出:

DataFrame.groupby()所见的各种用法详解

到此这篇关于 DataFrame.groupby() 所见的各种用法详解的文章就介绍到这了,更多相关 DataFrame.groupby()用法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python和pyqt实现360的CLable控件
Feb 21 Python
浅谈django中的认证与登录
Oct 31 Python
Python中Django 后台自定义表单控件
Mar 28 Python
Python+matplotlib+numpy绘制精美的条形统计图
Jan 02 Python
python读取文本绘制动态速度曲线
Jun 21 Python
python调用百度语音识别实现大音频文件语音识别功能
Aug 30 Python
Python实现word2Vec model过程解析
Dec 16 Python
使用python实现哈希表、字典、集合操作
Dec 22 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
Apr 08 Python
python的Jenkins接口调用方式
May 12 Python
教你用Python+selenium搭建自动化测试环境
Jun 18 Python
如何在python中实现ECDSA你知道吗
Nov 23 Python
详解pandas.DataFrame.plot() 画图函数
Jun 14 #Python
Pandas把dataframe或series转换成list的方法
Jun 14 #Python
详解pandas获取Dataframe元素值的几种方法
Jun 14 #Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
Jun 14 #Python
Python脚本破解压缩文件口令实例教程(zipfile)
Jun 14 #Python
pandas创建DataFrame的7种方法小结
Jun 14 #Python
Python中zipfile压缩文件模块的基本使用教程
Jun 14 #Python
You might like
sqlyog 中文乱码问题的设置方法
2008/10/19 PHP
处理php自动反斜杠的函数代码
2010/01/05 PHP
一个PHP并发访问实例代码
2012/09/06 PHP
php+mysql大量用户登录解决方案分析
2014/12/29 PHP
WordPress开发中的get_post_custom()函数使用解析
2016/01/04 PHP
golang、python、php、c++、c、java、Nodejs性能对比
2017/03/12 NodeJs
33种Javascript 表格排序控件收集
2009/12/03 Javascript
Jquery 跨域访问 Lightswitch OData Service的方法
2013/09/11 Javascript
JavaScript中“过于”犀利地for/in循环使用示例
2013/10/22 Javascript
JavaScript中for..in循环陷阱介绍
2013/11/12 Javascript
js中flexible.js实现淘宝弹性布局方案
2020/06/23 Javascript
探讨JavaScript语句的执行过程
2016/01/28 Javascript
JS控制页面跳转时未请求要跳转的地址怎么回事
2016/10/14 Javascript
js实现简单的网页换肤效果
2017/01/18 Javascript
浅谈Vue2.0中v-for迭代语法的变化(key、index)
2018/03/06 Javascript
vue-cli3自动消除console.log()的调试信息方式
2020/10/21 Javascript
浅要分析Python程序与C程序的结合使用
2015/04/07 Python
django限制匿名用户访问及重定向的方法实例
2018/02/07 Python
Keras 实现加载预训练模型并冻结网络的层
2020/06/15 Python
前端面试必备之html5的新特性
2017/09/05 HTML / CSS
戛纳奢侈品商店:Jacques Loup法国
2019/11/04 全球购物
如何减少垃圾回收让内存更加有效使用
2013/10/18 面试题
如何拷贝一整个Java对象,包括它的状态
2013/12/27 面试题
人事主管岗位职责范本
2013/12/04 职场文书
新领导上任欢迎词
2014/01/13 职场文书
光盘行动倡议书
2014/02/02 职场文书
高中军训感言500字
2014/02/24 职场文书
2014村书记党建工作汇报材料
2014/11/02 职场文书
公路施工安全责任书
2015/05/08 职场文书
茶花女读书笔记
2015/06/29 职场文书
2016年领导干部正风肃纪心得体会
2015/10/09 职场文书
2016年教师节慰问信
2015/12/01 职场文书
关于做家务的心得体会
2016/01/23 职场文书
导游词之无锡古运河
2019/11/14 职场文书
Redis基本数据类型Zset有序集合常用操作
2022/06/01 Redis
win10双系统怎么删除一个系统?win10电脑有两个系统删除一个的操作方法
2022/07/15 数码科技