《Python for Data Analysis》
GroupBy
分组运算:split-apply-combine(拆分-应用-合并)
DataFrame可以在其行(axis=0)或列(axis=1)上进行分组。然后,将一个函数应用到各个分组并产生新值。最后,所有这些函数的执行结果会被合并到最终的结果对象中去。
GroupBy的size方法可以返回一个含有分组大小的Series。
对分组进行迭代
for (k1,k2), group in df.groupby(['key1','key2']): print k1,k2 print group
选取一个或一组列
df.groupby(['key1','key2'])[['data2']].mean()
通过字典或Series进行分组
只需将字典或Series传给groupby即可。
通过函数分组
people.groupby(len).sum() #根据人名的长度进行分组
通过索引级别分组
层次化索引数据,根据索引级别进行聚合,通过level关键字传入级别编号或名称。
df.groupby(level='cty',axis=1).count()
数据聚合
经过优化的groupby方法
函数名
说明
count
分组中非NA值得数量
sum
非NA值的和
mean
非NA值的平均值
median
非NA值的算术平均数
std、var
无偏(分母为n-1)标准差和方差
min、max
非NA值的最小值和最大值
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
一般性的“拆分-应用-合并”
tips.groupby('smoker').apply(top)相当于top函数在DataFrame的各个片段上调用,然后结果由pandas.concat组装到一起,并以分组名称进行了标记。,于是,最终结果就有了一个层次化索引,其内层索引值来自于原DataFrame.
禁止分组键: 分组键会跟原始对象的索引共同构成结果对象中的层次化索引。将group_keys=False传入groupby即可禁止该效果。tips.groupby('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
是一种用于计算分组频率的特殊透视表。
pd.crosstab([tips.time, tips.day], tips.smoker, margins=True)
以上这篇pandas数据分组和聚合操作方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
pandas,数据分组
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]