Pandas agg()函数介绍及命名聚合

本文详细介绍了Pandas库中的agg()函数,包括其在Series、DataFrame和GroupBy对象上的应用,如何使用多个聚合函数,以及如何传递自定义函数进行聚合操作。
摘要由CSDN通过智能技术生成

简介

  • agg() 函数是 Pandas 库中的一个非常强大的函数,用于执行聚合操作。在 Pandas 中,聚合通常指的是对一组值执行某种计算以返回一个单一的值,例如求和、平均值、最大值、最小值等。
  • agg() 函数可以应用于 Pandas 的 SeriesDataFrame 或 GroupBy 对象。它允许你灵活地应用一个或多个聚合函数到数据上。

基本用法

  • 应用于Series 
    • import pandas as pd
      
      s = pd.Series([1, 2, 3, 4, 5])
      print(s.agg('sum'))
      # 输出 15
  • 应用于DataFrame
    • import pandas as pd
      
      df = pd.DataFrame({
          'A': [1, 2, 3],
          'B': [4, 5, 6]})
      
      print(df.agg('sum'))  # 对每列求和
      
      '''输出
      A     6
      B    15
      dtype: int64
      '''
  • 使用多个聚合函数
    • 你可以将多个聚合函数放入一个list里传递给 agg() 以在一个操作中获取多个结果。        
    • import pandas as pd
      
      df = pd.DataFrame({
          'A': [1, 2, 3],
          'B': [4, 5, 6]})
      agg_df = df.agg(['sum', 'mean'])
      print(agg_df)
      '''输出
              A     B
      sum   6.0  15.0
      mean  2.0   5.0
      '''
  • 使用自定义函数
    • 你也可以传递自定义的函数给 agg() 来执行聚合操作。
    • 传递给自定义函数custom_agg的参数是pd.Series A列或pd.DataFrame df。
    • 以pd.Series方式df['A']传入A列时返回numpy.float64,以pd.DataFrame方式df[['A']]传入A列时返回Series,如果多个聚合函数返回DataFrame
    • import pandas as pd
      
      def custom_agg(s):
          return s.sum() * s.mean()
      
      df = pd.DataFrame({
          'A': [1, 2, 3],
          'B': [4, 5, 6]})
      print(df.agg(custom_agg))
      print(type(df.agg(custom_agg)))  #<class 'pandas.core.series.Series'>
      '''输出
      A    12.0
      B    75.0
      dtype: float64
      <class 'pandas.core.series.Series'>
      '''
      
      print(df['A'].agg(custom_agg))
      print(type(df['A'].agg(custom_agg)))  #<class 'numpy.float64'>
      '''输出
      12.0
      <class 'numpy.float64'>
      '''
      
      print(df[['A']].agg(custom_agg))
      print(type(df[['A']].agg(custom_agg)))  #<class 'pandas.core.series.Series'>
      '''输出
      A    12.0
      dtype: float64
      <class 'pandas.core.series.Series'>
      '''
      
  • 在Groupby中使用
    • agg() 在 GroupBy 对象中特别有用,允许你对每个组执行聚合操作。
    • import pandas as pd
      
      
      df = pd.DataFrame({
          'A': [1, 2, 3],
          'B': [4, 5, 6]})
      df['Group'] = ['T1', 'T2', 'T1']
      print(df)
      '''output
         A  B Group
      0  1  4    T1
      1  2  5    T2
      2  3  6    T1
      '''
      
      add_df = df.groupby(['Group']).agg(['sum', 'mean'])
      print(add_df)
      '''output
              A        B     
            sum mean sum mean
      Group                  
      T1      4  2.0  10  5.0
      T2      2  2.0   5  5.0
      '''
  • 对不同的列使用不同的agg函数 
  • import pandas as pd
    
    
    df = pd.DataFrame({
        'A': [1, 2, 3],
        'B': [4, 5, 6]})
    df['Group'] = ['T1', 'T2', 'T1']
    print(df)
    '''output
       A  B Group
    0  1  4    T1
    1  2  5    T2
    2  3  6    T1
    '''
    ser1 = df.agg({'A': 'sum', 'B': 'mean'})
    print(ser1)
    print(type(ser1))
    '''output
    A    6.0
    B    5.0
    dtype: float64
    <class 'pandas.core.series.Series'>
    '''

命名聚合 

  • 命名聚合(Named Aggregation)是 Pandas 库中一种特殊的聚合方式,主要用于在 GroupBy 操作中更清晰、明确地指定聚合操作的输出列名以及对应的聚合函数。  
  • 命名聚合通过关键字参数的方式指定输出的列名和对应的聚合函数。具体来说,关键字参数的名字将成为输出 DataFrame 的列名,而对应的值则是要应用的聚合函数。
  • 命名聚合还支持 lambda 函数作为聚合函数,可以方便地进行一些自定义的计算。
  • 命名聚合绝大多数用于 GroupBy 操作 ,很少用于普通的 Series 或 DataFrame 对象。这里也给出用例。
  • 用于普通DataFrame,SUM_A 和MEAN_B输出 DataFrame 的行index
    • import pandas as pd
      
      df = pd.DataFrame({
          'A': [1, 2, 3],
          'B': [4, 5, 6]})
      df['Group'] = ['T1', 'T2', 'T1']
      print(df)
      '''output
         A  B Group
      0  1  4    T1
      1  2  5    T2
      2  3  6    T1
      '''
      
      df2 = df.agg(SUM_A=('A', 'sum'), MEAN_B=('B', 'mean'))
      print(df2)
      print(type(df2))
      '''output
                A    B
      SUM_A   6.0  NaN
      MEAN_B  NaN  5.0
      <class 'pandas.core.frame.DataFrame'>
      '''
      
  • 用于Groupby, SUM_A 和MEAN_B输出 DataFrame 的列名
  • import pandas as pd
    
    df = pd.DataFrame({
        'A': [1, 2, 3],
        'B': [4, 5, 6]})
    df['Group'] = ['T1', 'T2', 'T1']
    print(df)
    '''output
       A  B Group
    0  1  4    T1
    1  2  5    T2
    2  3  6    T1
    '''
    
    df2 = df.agg(SUM_A=('A', 'sum'), MEAN_B=('B', 'mean'))
    print(df2)
    print(type(df2))
    '''output
              A    B
    SUM_A   6.0  NaN
    MEAN_B  NaN  5.0
    <class 'pandas.core.frame.DataFrame'>
    '''
    
    df3 = df.groupby(['Group']).agg(SUM_A=('A', 'sum'), MEAN_B=('B', 'mean'))
    print(df3)
    print(type(df3))
    '''output
           SUM_A  MEAN_B
    Group               
    T1         4     5.0
    T2         2     5.0
    <class 'pandas.core.frame.DataFrame'>
    '''

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值