python表格数据分类聚合_pandas数据分组和聚合操作⽅法《Python for Data Analysis》
GroupBy
分组运算:split-apply-combine(拆分-应⽤-合并)
DataFrame可以在其⾏(axis=0)或列(axis=1)上进⾏分组。然后,将⼀个函数应⽤到各个分组并产⽣新值。最后,所有这些函数的执⾏结果会被合并到最终的结果对象中去。
GroupBy的size⽅法可以返回⼀个含有分组⼤⼩的Series。
对分组进⾏迭代
for (k1,k2), group upby(['key1','key2']):
print k1,k2
print group
选取⼀个或⼀组列
通过字典或Series进⾏分组
只需将字典或Series传给groupby即可。
通过函数分组
通过索引级别分组
层次化索引数据,根据索引级别进⾏聚合,通过level关键字传⼊级别编号或名称。
数据聚合
经过优化的groupby⽅法
函数名
说明
count
分组中⾮NA值得数量
sum
⾮NA值的和
mean
⾮NA值的平均值
median
⾮NA值的算术平均数
std、var
⽆偏(分母为n-1)标准差和⽅差
min、max
⾮NA值的最⼩值和最⼤值groupby是什么函数
prod
⾮NA值的积
first、last
第⼀个和最后⼀个⾮NA值
对于上述描述统计⽅法,可以将函数名以字符串的形式传⼊agg⽅法。例如:grouped.agg(['mean', 'std'])
如果要使⽤⾃⼰的聚合函数,只需将其传⼊aggregate或agg⽅法即可
def peak_to_peak(arr):
return arr.max() - arr.min()
grouped.agg(peak_to_peak)
⾯向列的多函数应⽤,可以对不同的列使⽤不同的聚合函数或者⼀次应⽤多个函数。
如果传⼊⼀组函数或函数名,得到的DataFrame的列就会以相应的函数命名
如果传⼊的是⼀个由(name,function)元组组成的列表,各个元组的第⼀个元素就会被⽤作DataFrame的列名。
不同的列使⽤不同的聚合函数也可以向agg传⼊⼀个从列名映射到函数的字典
grouped.agg(['mean', 'std', peak_to_peak]) # 1
grouped.agg([('foo', 'mean'), ('bar', np.std)]) # 2
functions = ['count', 'mean', 'max']
result = grouped['tip', 'bill'].agg(functions) # 3
grouped.agg({'tip' : np.max, 'bill' : 'sum'}) # 4
分组级运算和转换
transform
transform会将⼀个函数应⽤到各个分组,然后将结果放置到适当的位置上。如果各个分组产⽣的是⼀个标量值,则该值就会被⼴播出去。
apply
⼀般性的“拆分-应⽤-合并”
禁⽌分组键: 分组键会跟原始对象的索引共同构成结果对象中的层次化索引。将group_keys=False传⼊groupby即可禁⽌该效果。upby('smoker', group_keys=False).apply(top)
在GroupBy对象上调⽤describe相当于f = lambda x : x.describe(); grouped.apply(f).
数据汇总⼯具
透视表 pivot_table
根据⼀个或多个键对数据进⾏聚合,并根据⾏和列上的分组键将数据分配到各个矩形区域。
tips.pivot_table('tip_pct', index=['time', 'size', 'smoker'],
columns='day', aggfunc='mean', fill_value=0)
参数名
说明
values
待聚合的列的名称。默认所有列
rows
⽤于分组的列名或者其他分组键,出现在结果透视表的⾏
cols
⽤于分组的列名或者其他分组键,出现在结果透视表的列
aggfunc
聚合函数或函数列表,默认“mean”。可以是任何对groupby有效的函数
fill_value
⽤于替换结果表中缺失值
margins
添加⾏/列⼩计和总计,默认为False
交叉表 crosstab
是⼀种⽤于计算分组频率的特殊透视表。
以上这篇pandas数据分组和聚合操作⽅法就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持脚本之家。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论