pandas聚合和分组运算之groupby

Posted wqbin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas聚合和分组运算之groupby相关的知识,希望对你有一定的参考价值。

pandas提供了一个灵活高效的groupby功能,它使你能以一种自然的方式对数据集进行切片、切块、摘要等操作。根据一个或多个键(可以是函数、数组或DataFrame列名)拆分pandas对象。计算分组摘要统计,如计数、平均值、标准差,或用户自定义函数。对DataFrame的列应用各种各样的函数。应用组内转换或其他运算,如规格化、线性回归、排名或选取子集等。计算透视表或交叉表。执行分位数分析以及其他分组分析。

1、首先来看看下面这个非常简单的表格型数据集(以DataFrame的形式):

import pandas as pd
import numpy as np
df = pd.DataFrame({key1:[a, a, b, b, a],
     key2:[one, two, one, two, one],
     data1:np.random.randn(5),
     data2:np.random.randn(5)})
df

技术图片

 

 

 

2.按key1进行分组,并计算data1列的平均值,我们可以访问data1,并根据key1调用groupby:

grouped = df[data1].groupby(df[key1])
grouped

变量grouped是一个GroupBy对象,它实际上还没有进行任何计算,只是含有一些有关分组键df[‘key1‘]的中间数据而已,然后我们可以调用GroupBy的mean方法来计算分组平均值:

grouped.mean()

技术图片

 

 

 说明:数据(Series)根据分组键进行了聚合,产生了一个新的Series,其索引为key1列中的唯一值。之所以结果中索引的名称为key1,是因为原始DataFrame的列df[‘key1‘]就叫这个名字

3、如果我们一次传入多个数组,就会得到不同的结果:

means = df[data1].groupby([df[key1], df[key2]]).mean()
means

技术图片

通过两个键对数据进行了分组,得到的Series具有一个层次化索引(由唯一的键对组成):

然后我用unstack 把他的二阶索引摊开:

技术图片

 

 在上面这些示例中,分组键均为Series。实际上,分组键可以是任何长度适当的数组:

states = np.array([Ohio, California, California, Ohio, Ohio])
years = np.array([2005, 2005, 2006, 2005, 2006])
df[data1].groupby([states, years]).mean()

结果:
California      2005   -2.120793
                2006    0.642216
Ohio            2005    0.282230
                2006   -1.017495
dtype: float64

 4、此外,你还可以将列名(可以是字符串、数字或其他Python对象)用作分组将:

df.groupby(key1).mean()

技术图片

 

 

df.groupby([key1, key2]).mean()

技术图片

 

 

说明:在执行df.groupby(‘key1‘).mean()时,结果中没有key2列。这是因为df[‘key2‘]不是数值数据,所以被从结果中排除了。

默认情况下,所有数值列都会被聚合,虽然有时可能会被过滤为一个子集。

无论你准备拿groupby做什么,都有可能会用到GroupBy的size方法,它可以返回一个含有分组大小的Series:

df1=df.groupby([key1, key2]).size()
print(df1)
print(type(df1))

技术图片

 

 注意:分组键中的任何缺失值都会被排除在结果之外。 

区别于:

技术图片

 

 

5、对分组进行迭代

GroupBy对象支持迭代,可以产生一组二元元组(由分组名和数据块组成)。看看下面这个简单的数据集:

for name, group in df.groupby(key2):
    print(name)
    print(group)

技术图片

 

 对于多重键的情况,元组的第一个元素将会是由键值组成的元组:

以上是关于pandas聚合和分组运算之groupby的主要内容,如果未能解决你的问题,请参考以下文章

Pandas分组与聚合

数据聚合与分组运算

Python数据聚合和分组运算-GroupBy Mechanics

Pandas-数据聚合与分组运算

利用Python进行数据分析-Pandas(第六部分-数据聚合与分组运算)

数据分析—Pandas 中的分组聚合Groupby 高阶操作