groupby的操作可以被分为3部分:
第一步,存储于series或DataFrame中的数据,根据不同的keys会被split(分割)为多个组。(这个分组可以按照不同的轴进行划分,axis=0按照行;axis=1按照列)
第二步,我们可以把函数例如mean等,apply在每一个组上,产生一个新的值。
第三步,函数产生的结果被combine(结合)为一个结果对象(result object)。
使用例子来看一下,创建一个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)})
print(df)
看一下创建的df对象:
key1 key2 data1 data2
0 a one -1.124935 -1.714341
1 a two -0.341428 0.097469
2 b one -0.491872 -0.078691
3 b two -0.112789 -0.613882
4 a one 0.678358 -0.874833
下面我们进行第一步,按照key1作为关键字进行分组。需要分组的数据是data1。即对data1这个series进行分组,分组的关键字是key1列。
grouped = df['data1'].groupby(df['key1']) 看一下grouped的属性:
这个grouped变量是一个GroupBy object(分组对象)。实际上现在还没有进行任何计算。这个GroupBy object(分组对象)已经有了我们想要的信息,现在需要的是对于每一个group进行一些操作。例如,通过调用GroupBy的mean方法,我们可以计算每个组的平均值:
grouped.mean() 输出的结果如下:
key1
a 0.512433
b 0.464582
Name: data1, dtype: float64
总结一下:我们通过group key(分组键)对数据(a series)进行了聚合,这产生了一个新的Series,而且这个series的索引是key1列中不同的值,index(索引)的名字也是key1',因为我们使用了df['key1']。
—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com