简介
agg()
函数是 Pandas 库中的一个非常强大的函数,用于执行聚合操作。在 Pandas 中,聚合通常指的是对一组值执行某种计算以返回一个单一的值,例如求和、平均值、最大值、最小值等。agg()
函数可以应用于 Pandas 的Series
、DataFrame
或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 '''
- 你可以将多个聚合函数放入一个list里传递给
- 使用自定义函数
- 你也可以传递自定义的函数给
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'> '''