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实现的文件夹清理程序分享
Nov 22 Python
Python类属性的延迟计算
Oct 22 Python
python利用不到一百行代码实现一个小siri
Mar 02 Python
Python数据可视化正态分布简单分析及实现代码
Dec 04 Python
selenium+python自动化测试环境搭建步骤
Jun 03 Python
python2.7的flask框架之引用js&css等静态文件的实现方法
Aug 22 Python
python nmap实现端口扫描器教程
May 28 Python
Python中的引用和拷贝实例解析
Nov 14 Python
Python threading.local代码实例及原理解析
Mar 16 Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
Jun 04 Python
python 读取.nii格式图像实例
Jul 01 Python
python两种获取剪贴板内容的方法
Nov 06 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
PHP+MYSQL的文章管理系统(一)
2006/10/09 PHP
PHP连接access数据库
2008/03/27 PHP
Yii基于数组和对象的Model查询技巧实例详解
2015/12/28 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
[IE&FireFox兼容]JS对select操作
2007/01/07 Javascript
ExtJS GTGrid 简单用户管理
2009/07/01 Javascript
jquery 如何动态添加、删除class样式方法介绍
2012/11/07 Javascript
通过javascript获取iframe里的值示例代码
2013/06/24 Javascript
JavaScript实现的日期控件具体代码
2013/11/18 Javascript
Javascript中浮点数相乘的一个解决方法
2014/06/03 Javascript
JS实现同时搜索百度和必应的方法
2015/01/27 Javascript
JavaScript 里的类数组对象
2015/04/08 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
究竟什么是Node.js?Node.js有什么好处?
2015/05/29 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
JavaScript实现页面定时刷新(定时器,meta)
2016/10/12 Javascript
vue2实现数据请求显示loading图
2017/11/28 Javascript
JS实现的透明度渐变动画效果示例
2018/04/28 Javascript
js html实现计算器功能
2018/11/13 Javascript
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
微信公众号生成新浪短网址的实现(快速生成)
2019/08/18 Javascript
vue实现滚动鼠标滚轮切换页面
2020/12/13 Vue.js
实例讲解Python的函数闭包使用中应注意的问题
2016/06/20 Python
基于Python中numpy数组的合并实例讲解
2018/04/04 Python
pycharm: 恢复(reset) 误删文件的方法
2018/10/22 Python
Django后台admin的使用详解
2019/07/08 Python
python集合的创建、添加及删除操作示例
2019/10/08 Python
原生canvas制作画图小工具的踩坑和爬坑
2020/06/09 HTML / CSS
美国杂志订阅折扣与优惠网站:Magazines.com
2016/08/31 全球购物
Lookfantastic西班牙官网:英国知名美妆购物网站
2018/06/13 全球购物
Stuarts London美国/加拿大:世界领先的独立男装零售商之一
2019/03/18 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2013/01/18 面试题
银行开业庆典方案
2014/02/06 职场文书
机关工会开展学习雷锋活动总结
2014/03/01 职场文书
文艺晚会主持词
2014/03/24 职场文书
计划生育责任书
2015/05/09 职场文书