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遍历文件夹并删除特定格式文件的示例
Mar 05 Python
python字符串排序方法
Aug 29 Python
以一个投票程序的实例来讲解Python的Django框架使用
Feb 18 Python
python 循环while和for in简单实例
Aug 16 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
Nov 29 Python
Django使用unittest模块进行单元测试过程解析
Aug 02 Python
Python实现基于socket的udp传输与接收功能详解
Nov 15 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
Dec 12 Python
Python3自动生成MySQL数据字典的markdown文本的实现
May 07 Python
Pandas读取csv时如何设置列名
Jun 02 Python
使用Nibabel库对nii格式图像的读写操作
Jul 01 Python
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
Apr 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 中的面向对象编程:通向大型 PHP 工程的办法
2006/12/03 PHP
php的字符串用法小结
2010/06/08 PHP
PHP数组游标实现对数组的各种操作详解
2016/01/26 PHP
ThinkPHP5框架缓存查询操作分析
2018/05/30 PHP
PHP设计模式之建造者模式(Builder)原理与用法案例详解
2019/12/12 PHP
javascript 处理事件绑定的一些兼容写法
2009/12/24 Javascript
『jQuery』名称冲突使用noConflict方法解决
2013/04/22 Javascript
js内存泄露的几种情况详细探讨
2013/05/31 Javascript
jquery cookie实现的简单换肤功能适合小网站
2013/08/25 Javascript
javascript函数中参数传递问题示例探讨
2014/07/31 Javascript
JS修改iframe页面背景颜色的方法
2015/04/01 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
2015/11/24 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
2017/12/22 Javascript
Vue 去除路径中的#号
2018/04/19 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
layui table 复选框跳页后再回来保持原来选中的状态示例
2019/10/26 Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
2020/12/09 Javascript
python逐行读写txt文件的实例讲解
2018/04/03 Python
flask框架实现连接sqlite3数据库的方法分析
2018/07/16 Python
pyqt5的QComboBox 使用模板的具体方法
2018/09/06 Python
详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击
2018/10/09 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
Python读写锁实现实现代码解析
2020/11/28 Python
python爬取豆瓣电影排行榜(requests)的示例代码
2021/02/18 Python
CSS3 calc()会计算属性详解
2018/02/27 HTML / CSS
Sony C++笔试题
2013/03/10 面试题
春季运动会广播稿大全
2014/02/19 职场文书
小学社团活动总结
2014/06/27 职场文书
儿园租房协议书范本
2014/12/02 职场文书
雾霾停课通知
2015/04/24 职场文书
2016抗战胜利71周年红领巾广播稿
2015/12/18 职场文书
MySQL的安装与配置详细教程
2021/06/26 MySQL
JavaScript数组reduce()方法的语法与实例解析
2021/07/07 Javascript
关于Spring配置文件加载方式变化引发的异常详解
2022/01/18 Java/Android
python三子棋游戏
2022/05/04 Python