pandas数据分组和聚合操作方法
作者:Shingle_ 发布时间:2023-09-07 05:15:44
《Python for Data Analysis》
GroupBy
分组运算:split-apply-combine(拆分-应用-合并)
DataFrame可以在其行(axis=0)或列(axis=1)上进行分组。然后,将一个函数应用到各个分组并产生新值。最后,所有这些函数的执行结果会被合并到最终的结果对象中去。
GroupBy的size方法可以返回一个含有分组大小的Series。
对分组进行迭代
for (k1,k2), group in df.groupby(['key1','key2']):
print k1,k2
print group
选取一个或一组列
df.groupby(['key1','key2'])[['data2']].mean()
通过字典或Series进行分组
只需将字典或Series传给groupby即可。
通过函数分组
people.groupby(len).sum() #根据人名的长度进行分组
通过索引级别分组
层次化索引数据,根据索引级别进行聚合,通过level关键字传入级别编号或名称。
df.groupby(level='cty',axis=1).count()
数据聚合
经过优化的groupby方法
函数名 | 说明 |
---|---|
count | 分组中非NA值得数量 |
sum | 非NA值的和 |
mean | 非NA值的平均值 |
median | 非NA值的算术平均数 |
std、var | 无偏(分母为n-1)标准差和方差 |
min、max | 非NA值的最小值和最大值 |
prod | 非NA值的积 |
first、last | 第一个和最后一个非NA值 |
对于上述描述统计方法,可以将函数名以字符串的形式传入agg方法。例如:grouped.agg(['mean', 'std'])
如果要使用自己的聚合函数,只需将其传入aggregate或agg方法即可
def peak_to_peak(arr):
return arr.max() - arr.min()
grouped.agg(peak_to_peak)
面向列的多函数应用,可以对不同的列使用不同的聚合函数或者一次应用多个函数。
如果传入一组函数或函数名,得到的DataFrame的列就会以相应的函数命名
如果传入的是一个由(name,function)元组组成的列表,各个元组的第一个元素就会被用作DataFrame的列名。
不同的列使用不同的聚合函数也可以向agg传入一个从列名映射到函数的字典
grouped.agg(['mean', 'std', peak_to_peak]) # 1
grouped.agg([('foo', 'mean'), ('bar', np.std)]) # 2
functions = ['count', 'mean', 'max']
result = grouped['tip', 'bill'].agg(functions) # 3
grouped.agg({'tip' : np.max, 'bill' : 'sum'}) # 4
分组级运算和转换
transform
transform会将一个函数应用到各个分组,然后将结果放置到适当的位置上。如果各个分组产生的是一个标量值,则该值就会被广播出去。
apply
一般性的“拆分-应用-合并”
tips.groupby('smoker').apply(top)相当于top函数在DataFrame的各个片段上调用,然后结果由pandas.concat组装到一起,并以分组名称进行了标记。,于是,最终结果就有了一个层次化索引,其内层索引值来自于原DataFrame.
禁止分组键: 分组键会跟原始对象的索引共同构成结果对象中的层次化索引。将group_keys=False传入groupby即可禁止该效果。tips.groupby('smoker', group_keys=False).apply(top)
在GroupBy对象上调用describe相当于f = lambda x : x.describe(); grouped.apply(f).
数据汇总工具
透视表 pivot_table
根据一个或多个键对数据进行聚合,并根据行和列上的分组键将数据分配到各个矩形区域。
tips.pivot_table('tip_pct', index=['time', 'size', 'smoker'],
columns='day', aggfunc='mean', fill_value=0)
参数名 | 说明 |
---|---|
values | 待聚合的列的名称。默认所有列 |
rows | 用于分组的列名或者其他分组键,出现在结果透视表的行 |
cols | 用于分组的列名或者其他分组键,出现在结果透视表的列 |
aggfunc | 聚合函数或函数列表,默认“mean”。可以是任何对groupby有效的函数 |
fill_value | 用于替换结果表中缺失值 |
margins | 添加行/列小计和总计,默认为False |
交叉表 crosstab
是一种用于计算分组频率的特殊透视表。
pd.crosstab([tips.time, tips.day], tips.smoker, margins=True)
来源:https://blog.csdn.net/Shingle_/article/details/72677135
猜你喜欢
- ASP中RegExp是什么 '名字字符检验Public Function CheckName(Str) &nbs
- 以前我也写过一个注册表类,不过那一个不能进行多个类的注册,下面用数组对类进行了存储。 <?php //基础类 class webSit
- 一、前言本来写了脚本用于暴力破解密码,可是1秒钟尝试一个密码2220000个密码我的天,想用多线程可是只会一个for全开,难道开222000
- 如下所示:from splinter.browser import Browserb = Browser('chrome')
- 什么是memcached:memcached之前是danga的一个项目,最早是为LiveJournal服务的,当初设计师为了加速LiveJo
- 新建label与button,并设置位置(grid)import tkinter as tkroot = tk.Tk()label = tk
- 一、实验内容 对于下面这幅图像,编程实现染色体计数,并附简要处理流程说明。二、实验步骤1.中值滤波2.图像二值化3.膨胀图像4.腐
- 这篇文章主要介绍了Python namedtuple命名元组实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考
- 前言日常生活中,手残党们经常会把一些照片拍歪,比如拍个证件、试卷、PPT什么的,比如下面这本书的封面原本是个矩形,随手一拍就成了不规则四边形
- 本文实例讲述了python实现的爬取电影下载链接功能。分享给大家供大家参考,具体如下:#!/usr/bin/python#coding=UT
- 就前面所讲,函数的基本内容已经完毕。但是,函数还有很多值得不断玩味的细节。这里进行阐述。参数的传递python中函数的参数通过赋值的方式来传
- win2000注册表程序 regedt32.exe下面是解决IIS出现Active Server Pages错误&
- Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。其基本形式为:whil
- 能够为数据库数据提供的最简单的用户界面之一就是窗体,窗体可以一次性呈现出来自同一记录的各个域。本文通过python3+pyqt5改写实现了p
- 这篇文章主要介绍了Python Django 简单分页的实现代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习
- 本文作为属性篇的最后一篇文章, 将讲述HTML和CSS的关键—盒子模型(Box model). 理解Box model的关键便是margin
- 本教程中将详细阐述传统的图形设计元素是如何应用在现代(2.0时代)的页面设计中的,然后我将解释为什么它们能流行开来,以及如何、何时、在哪里使
- 目录生成迷宫走出迷宫可视化总结相信大家都玩过迷宫的游戏,对于简单的迷宫,我们可以一眼就看出通路,但是对于复杂的迷宫,可能要仔细寻找好久,甚至
- 【基本介绍】【格式】:pivot(聚合函数 for 需要转为列的字段名 in(需要转为列的字段值))【说明】:实现将指定字段的字段值转换为列
- 需求给定一个日期,格式如 “2020-2-12”,计算出这个日期是 2020 年的第几天?实现思路使用 tkinter 和 tkinter.