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实现ipsec开权限实例
Nov 11 Python
python实现堆栈与队列的方法
Jan 15 Python
python编写分类决策树的代码
Dec 21 Python
python3如何将docx转换成pdf文件
Mar 23 Python
python爬虫_实现校园网自动重连脚本的教程
Apr 22 Python
详谈python3 numpy-loadtxt的编码问题
Apr 29 Python
对Pytorch神经网络初始化kaiming分布详解
Aug 18 Python
PyCharm搭建Spark开发环境的实现步骤
Sep 05 Python
Python流程控制常用工具详解
Feb 24 Python
python numpy--数组的组合和分割实例
Feb 24 Python
Django实现翻页的示例代码
May 24 Python
Python面向对象编程之类的概念
Nov 01 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
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
2010/05/04 PHP
php中存储用户ID和密码到mysql数据库的方法
2013/02/06 PHP
yii2学习教程之5种内置行为类详解
2017/08/03 PHP
PHP获取真实IP及IP模拟方法解析
2020/11/24 PHP
javascript 学习之旅 (1)
2009/02/05 Javascript
js的参数有长度限制吗?发现不能超过2083个字符
2014/04/20 Javascript
JS+CSS实现精美的二级导航效果代码
2015/09/17 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
2015/12/11 Javascript
Eclipse编辑jsp、js文件时卡死现象的解决办法汇总
2016/02/02 Javascript
jquery实现下拉框多选方法介绍
2017/01/03 Javascript
Angular指令之restict匹配模式的详解
2017/07/27 Javascript
vue中动态设置meta标签和title标签的方法
2018/07/11 Javascript
javascript动态创建对象的属性详解
2018/11/07 Javascript
koa2实现登录注册功能的示例代码
2018/12/03 Javascript
详解如何在Angular优雅编写HTTP请求
2018/12/05 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
vue引入静态js文件的方法
2020/06/20 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
[53:43]VP vs NewBee Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
在Django中创建第一个静态视图
2015/07/15 Python
Python装饰器入门学习教程(九步学习)
2016/01/28 Python
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
浅谈Python 列表字典赋值的陷阱
2019/01/20 Python
对python3.4 字符串转16进制的实例详解
2019/06/12 Python
pytorch 在sequential中使用view来reshape的例子
2019/08/20 Python
Python读取分割压缩TXT文本文件实例
2020/02/14 Python
建筑结构施工求职信
2014/07/11 职场文书
大学生操行评语大全
2014/12/31 职场文书
英语教师求职信范文
2015/03/20 职场文书
幼儿园新生开学寄语
2015/05/27 职场文书
安全生产感想
2015/08/07 职场文书
会议承办单位欢迎词
2019/07/09 职场文书
Pytorch反向传播中的细节-计算梯度时的默认累加操作
2021/06/05 Python
virtualenv隔离Python环境的问题解析
2022/06/21 Python