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 正则表达式操作指南
May 04 Python
Python打印scrapy蜘蛛抓取树结构的方法
Apr 08 Python
探究Python中isalnum()方法的使用
May 18 Python
python开发之tkinter实现图形随鼠标移动的方法
Nov 11 Python
Python中绑定与未绑定的类方法用法分析
Apr 29 Python
使用python生成目录树
Mar 29 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
Mar 09 Python
PyTorch在Windows环境搭建的方法步骤
May 12 Python
Keras 使用 Lambda层详解
Jun 10 Python
python使用自定义钉钉机器人的示例代码
Jun 24 Python
Python+OpenCV检测灯光亮点的实现方法
Nov 02 Python
python实现网络五子棋
Apr 11 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
全国FM电台频率大全 - 14 江西省
2020/03/11 无线电
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
php session处理的定制
2009/03/16 PHP
PHP实现创建微信自定义菜单的方法示例
2017/07/14 PHP
Extjs学习笔记之一 初识Extjs之MessageBox
2010/01/07 Javascript
Extjs TriggerField在弹出窗口显示不出问题的解决方法
2010/01/08 Javascript
向左滚动文字 js代码效果
2013/08/17 Javascript
9款2014最热门jQuery实用特效推荐
2014/12/07 Javascript
jQuery AjaxUpload 上传图片代码
2016/02/02 Javascript
JavaScript之WebSocket技术详解
2016/11/18 Javascript
详解Angular4 路由设置相关
2017/08/26 Javascript
如何编写一个完整的Angular4 FormText 组件
2017/11/18 Javascript
JS基于递归实现网页版计算器的方法分析
2017/12/20 Javascript
js实现图片上传并预览功能
2018/08/06 Javascript
jQuery实现简单的Ajax调用功能示例
2019/02/15 jQuery
node.js中ws模块创建服务端和客户端,网页WebSocket客户端
2019/03/06 Javascript
怎么使用javascript深度拷贝一个数组
2019/06/06 Javascript
利用JS如何获取form表单数据
2019/12/19 Javascript
浅谈vue项目,访问路径#号的问题
2020/08/14 Javascript
js+canvas实现画板功能
2020/09/13 Javascript
js数组的基本使用总结
2021/01/18 Javascript
[01:08]DOTA2次级职业联赛 - Shield战队宣传片
2014/12/01 DOTA
python函数返回多个值的示例方法
2013/12/04 Python
横向对比分析Python解析XML的四种方式
2016/03/30 Python
Django 导出 Excel 代码的实例详解
2017/08/11 Python
Python程序退出方式小结
2017/12/09 Python
Python爬虫实现百度图片自动下载
2018/02/04 Python
python2.7无法使用pip的解决方法(安装easy_install)
2018/04/03 Python
python实现在内存中读写str和二进制数据代码
2020/04/24 Python
纽约21世纪百货官网:Century 21
2016/08/27 全球购物
《荷花》教学反思
2014/04/16 职场文书
幼儿评语大全
2014/04/30 职场文书
2014年祖国生日寄语
2014/09/19 职场文书
2014年内部审计工作总结
2014/12/09 职场文书
小学教师教学反思
2016/02/24 职场文书
2016年优秀教师先进事迹材料
2016/02/26 职场文书