数据聚合和分组运算的知识点梳理
数据聚合和分组运算的知识点梳理
在数据集准备好之后,通常的任务是计算分组统计或⽣成透视表,pandas提供了⼀个灵活的⾼效的groupby功能。
关键词: groupby 、 aggregate(使⽤⾃定义函数)、transform、apply、pivot_table、crosstab
⼀、数据分组
groupby
要素:需要分组的列、分组键、函数
⽰例1:
means = df[‘date1’].groupby([df[‘key1’],df[‘key2’]]).mean() # 对数据1这⼀列以key1 和key2作为双索引进⾏分组并计算分组的平均值
1、分组键也可以是适当长度的数组
⽰例2:
states = np.array([‘Ohio’,‘California’,‘California’,‘Ohio’,‘Ohio’])
years = np.array([2005,2005,2006,2005,2006])
df = [‘data1’].groupby([states,years]).mean()
2、分组键也可以是列名
⽰例3:
3、对分组进⾏迭代
⽰例:
for name,group upby(‘key1’):
print name
print group
你也可以对这些数据⽚段做任何操作,⽐如,将这些数据做成字典
⽰例:
pieces = dict(upby(‘key1’)))
pieces[‘b’] # b是案例中分组的⽚段名,⽐如你的key索引中有a,b,c,d这些名称
4、选取⼀个组
⽰例:
5、通过字典进⾏分组,通过函数进⾏分组,通过索引进⾏分组
⼆、数据聚合
能够从数组产⽣标量值的数据转换过程,⽐如mean,count,min,和sum之类,除此之外你还可以⽤⾃⼰发明的聚合运算
1、调⽤函数
⽰例:
grouped = df.groupby(‘key1’)
grouped[‘data1’].quantile(0.9) # 计算data1列的样本分位数
2、如果要使⽤你⾃⼰的聚合函数,只需将其传⼊aggregate或agg⽅法即可
⽰例:
def peak_to_peak(arr)
return arr.max() - arr.min()
grouped.agg(peak_to_peak)
3、describe
⽰例:
grouped.describe()
*** ⾯向列的多函数使⽤:***
⽰例1:
functions = [‘count’,‘mean’,‘max’]
result = grouped[‘tip_pct’,‘total_bill’].agg(functions)
⽰例2:
ftuples = [(‘Dup’,‘mean’),(‘Abw’,np.var)]
grouped[‘tip_pct’,‘total_bill’].agg(ftuples) #为聚合的列指定名称
⽰例3:
grouped.agg({‘tip’:np.max,‘size’:‘sum’}) # 对不同的列应⽤不同的函数
分组级运算及转换
1、transform
demeaned = people . grouply(key).transform(demean)
2、apply 会将待处理的对象拆分成多个⽚段,对各⽚段调⽤传⼊的函数
⽰例:
def top(df,n=5,column=‘tip_pct’):
return df.sort_index(by=column)[-n:]
三、透视表和交叉表
关键词:pivot_table,crosstab
groupby分组1、透视表
⽰例1:
tips.pivot_table([‘tip_pct’,‘size’],rows = [‘sex’,‘days’],cols = ‘smoker’)
⽰例2:
tips.pivot_table([‘tip_pct’,‘size’],rows = [‘sex’,‘days’],cols = ‘smoker’,margins = True) # margins表⽰分项⼩计,会添加标签为All的⾏和列
⽰例3:
tips.pivot_table([‘tip_pct’,‘size’],rows = [‘sex’,‘days’],cols = ‘smoker’,aggfunc = ‘sum’,fill_value = 0 ) # 按照sum函数进⾏聚合,缺省值填充0
2、交叉表
⽰例:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。