利用Python进行数据分析10.2
10.2 数据聚合 Data Aggregation
-
使用quantile计算Serise或者是DataFrame列的样本分位数:
grouped=df.groupby('key1') grouped['data1'].quantile(0.9)求各个分组90%的分位数,a组中90%的分位数是1.668413;b组中90%的分位数是-0.523068。
-
如果使用你自己的聚合函数,需要将函数传递给agg或者aggregate函数:
def peak_to_peak(arr): return arr.max()-arr.min() #自建计算组内最大值减最小值的函数 grouped.agg(peak_to_peak)根据key1做的分组,也就是将data1和data2分为a,b两组;同时key2的数据类型非数值类型,默认丢弃。
10.2.1 逐列及多函数应用
-
根据列day和列smoker对tips进行分组:
grouped=tip.groupby(['day','smoker']) -
可以使用函数名以字符串形式传递:
grouped_pct=grouped['tip_pct'] grouped_pct.agg("mean")此时结果是一个Serise。
-
如果你传递的是函数或者是函数名的列表,那么你将获得一个列名是这些函数名的DataFrame:
grouped_pct.agg(["mean", "std", peak_to_peak])
-
自定义生成的DataFrame的列名:
grouped_pct.agg([("AVE", "mean"), ("STD", np.std)])如果你传递的是(name,founction)元组的列表,那么每个元组第一个元素将作为DataFrame的列名。
-
计算tip_pct和total_bill列的三个相同的统计值:
function=['count','mean','max'] result=grouped['tip_pct','total_bill'].agg(functions) result -
传递具有自定义名称的元组列表:
ftuples = [("Average", "mean"), ("Variance", np.var)] grouped[["tip_pct", "total_bill"]].agg(ftuples) -
使用字典形式传递函数,从而将不同的函数应用到一个或是多个列上:
agrouped.agg({'tip':'np.max','size':'sum'})在tip列计算每个小组的最大值;在size列统计总数。
-
使用字典形式在不同的列应用不同的函数:
grouped.agg({'tip_pct':['min','max','mean','std'],'size':'sum'})在tip_pct列计算每个小组的最大值,最小值,均值,方差;在size列统计总数。
10.2.2 返回不含行索引的聚合数据
在grouby中使用as_index=False来禁用分组键作为索引:
tips.groupby(['day','smoker'],as_index=False).mean()
当然,也可以分完组以后,在使用reset_index()将index恢复到dataframe中:
tips.groupby(['day','smoker']).mean().reset_index()

浙公网安备 33010602011771号