11-python-pandas-groupby

11. Pandas高级教程之:GroupBy用法

简介

pandas中的DF数据类型可以像数据库表格一样进行groupby操作。通常来说groupby操作可以分为三部分:分割数据,应用变换和和合并数据。

本文将会详细讲解Pandas中的groupby操作。

分割数据

分割数据的目的是将DF分割成为一个个的group。为了进行groupby操作,在创建DF的时候需要指定相应的label:

df = pd.DataFrame(
   ...:     {
   ...:         "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"],
   ...:         "B": ["one", "one", "two", "three", "two", "two", "one", "three"],
   ...:         "C": np.random.randn(8),
   ...:         "D": np.random.randn(8),
   ...:     }
   ...: )
   ...:

df
Out[61]: 
     A      B         C         D
0  foo    one -0.490565 -0.233106
1  bar    one  0.430089  1.040789
2  foo    two  0.653449 -1.155530
3  bar  three -0.610380 -0.447735
4  foo    two -0.934961  0.256358
5  bar    two -0.256263 -0.661954
6  foo    one -1.132186 -0.304330
7  foo  three  2.129757  0.445744

默认情况下,groupby的轴是x轴。可以一列group,也可以多列group:

多index

0.24版本中,如果我们有多index,可以从中选择特定的index进行group:

get_group

get_group 可以获取分组之后的数据:

dropna

默认情况下,NaN数据会被排除在groupby之外,通过设置 dropna=False 可以允许NaN数据:

groups属性

groupby对象有个groups属性,它是一个key-value字典,key是用来分类的数据,value是分类对应的值。

index的层级

对于多级index对象,groupby可以指定group的index层级:

group第一级:

group第二级:

group的遍历

得到group对象之后,我们可以通过for语句来遍历group:

如果是多字段group,group的名字是一个元组:

聚合操作

分组之后,就可以进行聚合操作:

对于多index数据来说,默认返回值也是多index的。如果想使用新的index,可以添加 as_index = False:

上面的效果等同于reset_index

grouped.size() 计算group的大小:

grouped.describe() 描述group的信息:

通用聚合方法

下面是通用的聚合方法:

函数
描述

mean()

平均值

sum()

求和

size()

计算size

count()

group的统计

std()

标准差

var()

方差

sem()

均值的标准误

describe()

统计信息描述

first()

第一个group值

last()

最后一个group值

nth()

第n个group值

min()

最小值

max()

最大值

同时使用多个聚合方法

可以同时指定多个聚合方法:

可以重命名:

NamedAgg

NamedAgg 可以对聚合进行更精准的定义,它包含 column 和aggfunc 两个定制化的字段。

或者直接使用一个元组:

不同的列指定不同的聚合方法

通过给agg方法传入一个字典,可以指定不同的列使用不同的聚合:

转换操作

转换是将对象转换为同样大小对象的操作。在数据分析的过程中,经常需要进行数据的转换操作。

可以接lambda操作:

填充na值:

过滤操作

filter方法可以通过lambda表达式来过滤我们不需要的数据:

Apply操作

有些数据可能不适合进行聚合或者转换操作,Pandas提供了一个 apply 方法,用来进行更加灵活的转换操作。

可以外接函数:

最后更新于

这有帮助吗?