pandas数据分组和聚合操作方法

《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)

以上这篇pandas数据分组和聚合操作方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

您可能感兴趣的文章:

  • pandas groupby 分组取每组的前几行记录方法
(0)

相关推荐

  • pandas groupby 分组取每组的前几行记录方法

    直接上例子. import pandas as pd df = pd.DataFrame({'class':['a','a','b','b','a','a','b','c','c'],'score':[3,5,6,7,8,9,10,11,14]}) df: class score 0 a 3 1 a 5 2 b 6 3 b 7 4 a 8 5 a 9 6 b 10 7 c 11 8 c 14 df.sort_values(['class','score'],ascending=[1,0],inp

  • pandas数据分组和聚合操作方法

    <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'

  • pandas数据分组groupby()和统计函数agg()的使用

    数据分组 使用 groupby() 方法进行分组 group.size()查看分组后每组的数量 group.groups 查看分组情况 group.get_group('名字') 根据分组后的名字选择分组数据 准备数据 # 一个Series其实就是一条数据,Series方法的第一个参数是data,第二个参数是index(索引),如果没有传值会使用默认值(0-N) # index参数是我们自定义的索引值,注意:参数值的个数一定要相同. # 在创建Series时数据并不一定要是列表,也可以将一个字典

  • pandas多级分组实现排序的方法

    pandas有groupby分组函数和sort_values排序函数,但是如何对dataframe分组之后排序呢? In [70]: df = pd.DataFrame(((random.randint(2012, 2016), random.choice(['tech', 'art', 'office']), '%dk-%dk'%(random.randint(2,10), random.randint(10, 20)), '') for _ in xrange(10000)), column

  • pandas数据预处理之dataframe的groupby操作方法

    在数据预处理过程中可能会遇到这样的问题,如下图:数据中某一个key有多组数据,如何分别对每个key进行相同的运算? dataframe里面给出了一个group by的一个操作,对于"group by"操作,我们通常是指以下一个或多个操作步骤: l (Splitting)按照一些规则将数据分为不同的组: l (Applying)对于每组数据分别执行一个函数: l (Combining)将结果组合到一个数据结构中: 使用dataframe实现groupby的用法: # -*- coding

  • pandas group分组与agg聚合的实例

    如下: import pandas as pd df = pd.DataFrame({'Country':['China','China', 'India', 'India', 'America', 'Japan', 'China', 'India'], 'Income':[10000, 10000, 5000, 5002, 40000, 50000, 8000, 5000], 'Age':[5000, 4321, 1234, 4010, 250, 250, 4500, 4321]}) 构造的数

  • 深入解析pandas数据聚合和重组

    目录 1GroupBy技术 1.1简介 1.3选取一个或一组列 1.4通过字典或Series进行分组 1.5利用函数进行分组 2数据聚合 2.1简介 2.1面向列的多函数应用 2.2以‘无索引’的方式返回聚合数据 介绍pandas数据聚合和重组的相关知识,仅供参考. 1GroupBy技术 1.1简介 简介:根据一个或多个键进行分组,每一组应用函数,再进行合并 分组的键有多种形式: 列表或数组,长度与待分组的轴一样 表示DataFrame某个列名的值 字典或Series,给出待分组轴上的值与分组名

  • Pandas 数据框增、删、改、查、去重、抽样基本操作方法

    总括 pandas的索引函数主要有三种: loc 标签索引,行和列的名称 iloc 整型索引(绝对位置索引),绝对意义上的几行几列,起始索引为0 ix 是 iloc 和 loc的合体 at是loc的快捷方式 iat是iloc的快捷方式 建立测试数据集: import pandas as pd df = pd.DataFrame({'a': [1, 2, 3], 'b': ['a', 'b', 'c'],'c': ["A","B","C"]}) p

  • Python Pandas实现数据分组求平均值并填充nan的示例

    Python实现按某一列关键字分组,并计算各列的平均值,并用该值填充该分类该列的nan值. DataFrame数据格式 fillna方式实现 groupby方式实现 DataFrame数据格式 以下是数据存储形式: fillna方式实现 1.按照industryName1列,筛选出业绩 2.筛选出相同行业的Series 3.计算平均值mean,采用fillna函数填充 4.append到新DataFrame中 5.循环遍历行业名称,完成2,3,4步骤 factordatafillna = pd.

  • 基于Morphia实现MongoDB按小时、按天聚合操作方法

    MongoDB按照天数或小时聚合 需求 最近接到需求,需要对用户账户下的设备状态,分别按照天以及小时进行聚合,以此为基础绘制设备状态趋势图. 实现思路是启动定时任务,对各用户的设备状态数据分别按照小时以及天进行聚合,并存储进数据库中供用户后续查询. 涉及到的技术栈分别为:Spring Boot,MongoDB,Morphia. 数据模型 @Data @Builder @Entity(value = "rawDevStatus", noClassnameStored = true) //

随机推荐