ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Pandas数据聚合与分组

2021-11-15 01:32:45  阅读:165  来源: 互联网

标签:聚合 apple price df1 groupby fruit 分组 Pandas


数据聚合与分组

  • 什么是分组聚合?如图:

image

  • 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
  • 聚合

    | 函数名 | 描述 | | :--- | :--- | | count | 分组中非NA值的数量 | | sum | 非NA值的和 | | mean | 非NA值的平均值 | | median | 非NA值的中位数 | | std, var | 标准差和方差 | | min, max | 非NA的最小值,最大值 | | prod | 非NA值的乘积 | | first, last | 非NA值的第一个,最后一个 |

    #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
    

标签:聚合,apple,price,df1,groupby,fruit,分组,Pandas
来源: https://www.cnblogs.com/lipinbigdata/p/15554235.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有