简介
pandas中一类非常重要的操作是数据聚合与分组运算。通过groupby方法能够实现对数据集的拆分、统计、转换等操作,这个过程一气呵成。
在本文中,你将学到:
选取特定列分组;
对分组进行迭代;
通过字典或Series分组;
通过函数分组;
通过索引级别分组。
Groupby技术
一个完整的分组运算过程是:“split-apply-combine”(拆分-应用-合并)。首先将数据分组拆分,按照组别划分。这种分组可以针对行(axis=0)或列(axis=1);然后针对分好的组别应用操作函数(聚合、统计等);最后这些结果会合并到最终对象中。这个过程如下:
接下来我们一一介绍。
选取特定列分组
直接来看一个例子:
>>>import numpy as np
>>>import pandas as pd
>>>df = pd.DataFrame({'x': list('aabba'), 'y': ['one', 'two', 'one', 'two', 'one'], 'd1': np.random.randn(5), 'd2': np.random.randn(5)})
x y d1 d2
0 a one 0.053183 0.447796
1 a two -1.117457 -1.476354
2 b one -1.360028 -2.527450
3 b two 1.856344 0.432823
4 a one -0.134772 1.628732
1
2
3
4
5
6
7
8
9
10
>>>importnumpyasnp
>>>importpandasaspd
>>>df=pd.DataFrame({'x':list('aabba'),'y':['one','two','one','two','one'],'d1':np.random.randn(5),'d2':np.random.randn(5)})
xyd1d2
0aone0.0531830.447796
1atwo-1.117457-1.476354
2bone-1.360028-2.527450
3btwo1.8563440.432823
4aone-0.1347721.628732
我们有这样一个DataFrame,假设我们想通过
x 进行分组,并计算
d1 列的平均值,有这样两种方式:
# 先选中d1列,然后再按照x分组
>>>a = df['d1'].groupby(df['x'])
>>>a
# 先分组,在选中d1列
>>>a = df.groupby('x')['d1']
1
2
3
4
5
6
7
8
# 先选中d1列,然后再按照x分组
>>>a=df['d1'].groupby(df['x'])
>>>a
# 先分组,在选中d1列
>>>a=df.groupby('x')['d1']
可以看出这里的变量
a 是一个
GroupBy 对象,可以认为它是做好了分组的中间数据。接下来我们就可以通过
mean() 方法计算平均值:
>>>a.mean()
x
a -0.399682
b 0.248158
Name: d1, dtype: float64
1
2
3
4
5
>>>a.mean()
x
a-0.399682
b0.248158
Name:d1,dtype:float64
结果表明,通过
x 分组后有
'a','b' 两组,最后得到两组的平均值。以上是通过一列进行分组,我们还可以指定多列分组:
>>>b = df.groupby(['x', 'y']).mean()
>>>b
d1 d2
x y
a one -0.040794 1.038264
two -1