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 相关文章推荐
pycharm 使用心得(二)设置字体大小
Jun 05 Python
Python中asyncore异步模块的用法及实现httpclient的实例
Jun 28 Python
基于hashlib模块--加密(详解)
Jun 21 Python
python中闭包Closure函数作为返回值的方法示例
Dec 17 Python
python 实现数组list 添加、修改、删除的方法
Apr 04 Python
关于python写入文件自动换行的问题
Jun 23 Python
Python自动抢红包教程详解
Jun 11 Python
python系列 文件操作的代码
Oct 06 Python
Python开发之基于模板匹配的信用卡数字识别功能
Jan 13 Python
Django Path转换器自定义及正则代码实例
May 29 Python
python实现按日期归档文件
Jan 30 Python
python实现Nao机器人的单目测距
Sep 04 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获取网站域名和地址的代码
2008/08/17 PHP
PHP中文件缓存转内存缓存的方法
2011/12/06 PHP
PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
2011/12/28 PHP
php支付宝系列之电脑网站支付
2018/05/30 PHP
Laravel如何自定义command命令浅析
2019/03/23 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
jQuery 使用手册(五)
2009/09/23 Javascript
Jquery实现带动画效果的经典二级导航菜单
2013/03/22 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
2013/04/02 Javascript
IE的事件传递-event.cancelBubble示例介绍
2014/01/12 Javascript
解决json日期格式问题的3种方法
2014/02/02 Javascript
JavaScript异步加载浅析
2014/12/28 Javascript
浅谈JavaScript字符串与数组
2015/06/03 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
JS生成和下载二维码的代码
2016/12/07 Javascript
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
使用D3.js+Vue实现一个简单的柱形图
2018/08/05 Javascript
vue里input根据value改变背景色的实例
2018/09/29 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
2019/08/23 Javascript
layui button 按钮弹出提示窗口,确定才进行的方法
2019/09/06 Javascript
python通过字典dict判断指定键值是否存在的方法
2015/03/21 Python
python版本单链表实现代码
2018/09/28 Python
python如何制作英文字典
2019/06/25 Python
完美解决python3.7 pip升级 拒绝访问问题
2019/07/12 Python
Python环境下安装PyGame和PyOpenGL的方法
2020/03/25 Python
Bergfreunde丹麦:登山装备网上零售商
2017/02/26 全球购物
美国经典刺绣和字母儿童服装特卖:Smocked Auctions
2018/07/16 全球购物
给老师的检讨书
2014/02/11 职场文书
《中彩那天》教学反思
2014/02/22 职场文书
初中生期末评语大全
2014/04/24 职场文书
竞争与合作演讲稿
2014/05/12 职场文书
聘用合同范本
2015/09/21 职场文书
浅谈如何写好演讲稿?
2019/06/12 职场文书
nginx限制并发连接请求数的方法
2021/04/01 Servers
Golang中异常处理机制详解
2021/06/08 Golang
python中 .npy文件的读写操作实例
2022/04/14 Python