Python数据分析入门(十二):数据聚合与分组

2021-06-05 03:04

阅读:471

标签:bsp   -o   str   gate   方法   list   均值   函数   min   

什么是分组聚合?

如图:

 

技术图片
  • groupby:(by=None,as_index=True)

by:根据什么进行分组,用于确定groupby的组

as_index:对于聚合输出,返回以组便签为索引的对象,仅对DataFrame

df1 = pd.DataFrame({fruit:[apple,banana,orange,apple,banana],
                    color:[red,yellow,yellow,cyan,cyan],
                   price:[8.5,6.8,5.6,7.8,6.4]})
#查看类型
type(df1.groupby(fruit))
pandas.core.groupby.groupby.DataFrameGroupBy  #GruopBy对象,它是一个包含组名,和数据块的2维元组序列,支持迭代
for name, group in df1.groupby(fruit):
    print(name) #输出组名
    apple
    banana
    orange

    print(group) # 输出数据块
       fruit color  price
    0  apple   red    8.5
    3  apple  cyan    7.8
       fruit   color  price
    1  banana  yellow    6.8
    4  banana    cyan    6.4
       fruit   color  price
    2  orange  yellow    5.6

    #输出group类型  
    print(type(group))  #数据块是dataframe类型
    class pandas.core.frame.DataFrame>
    class pandas.core.frame.DataFrame>
    class pandas.core.frame.DataFrame>

#选择任意的数据块
dict(list(df1.groupby(fruit)))[apple]  #取出apple组的数据块
   fruit color  price
0  apple   red    8.5
3  apple  cyan    7.8

 

聚合

技术图片
#Groupby对象具有上表中的聚合方法

#根据fruit来求price的平均值
df1[price].groupby(df1[fruit]).mean()
fruit
apple     8.15
banana    6.60
orange    5.60
Name: price, dtype: float64     
#或者
df1.groupby(fruit)[price].mean()

#as_index=False
df1.groupby(fruit,as_index=False)[price].mean()
    fruit    price
0    apple    8.15
1    banana    6.60
2    orange    5.60

"""
如果我现在有个需求,计算每种水果的差值,
1.上表中的聚合函数不能满足于我们的需求,我们需要使用自定义的聚合函数
2.在分组对象中,使用我们自定义的聚合函数
"""
#定义一个计算差值的函数
def diff_value(arr):
    return arr.max() - arr.min()
#使用自定义聚合函数,我们需要将函数传递给agg或aggregate方法,我们使用自定义聚合函数时,会比我们表中的聚合函数慢的多,因为要进行函数调用,数据重新排列
df1.groupby(fruit)[price].agg(diff_value)
fruit
apple     0.7
banana    0.4
orange    0.0
Name: price, dtype: float64

 

Python数据分析入门(十二):数据聚合与分组

标签:bsp   -o   str   gate   方法   list   均值   函数   min   

原文地址:https://www.cnblogs.com/qshhl/p/14638484.html


评论


亲,登录后才可以留言!