如何在 Pandas 中结合 Groupby 和多个聚合函数?
groupby() 和 aggregate() 是 Pandas 库中提供的两个函数。
groupby() 函数
groupby() 函数允许你根据一个或多个列对 DataFrame 进行分组。它在内部执行一系列操作,例如拆分对象、应用函数以及组合结果,这些操作都在DataFrame 对象上执行。
此函数返回 DataFrameGroupBy 对象,其中包含有关分组的信息。一旦我们获得此对象,我们就可以执行各种操作,例如计算平均值、计算总和和平均值等。
语法
以下是 groupby() 函数的语法:
DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, observed=False, dropna=True)
aggregate() 函数
aggregate() 函数用于在一个特定轴上对整个 DataFrame 或 DataFrame 中的特定列应用一个或多个操作(函数)。这些数学运算用于汇总和计算给定数据集的统计数据。agg 是 aggregate() 函数的别名。
语法
以下是 groupby 的语法:
DataFrame.aggregate(func=None, axis=0, *args, **kwargs)
其中,
func - 这是用于计算聚合值的函数或函数列表。
axis - 此值指定轴(列:0 或 'index' 以及行 - 1 或 'columns')。
*args - 传递给 func 的位置参数
**kwargs - 传递给 func 的关键字参数
结合 Groupby 和多个聚合函数
我们可以使用 aggregate() 或 agg() 函数对 Groupby 子句的结果执行多个聚合函数,例如 sum、mean、min max 等,如下所示:
pandas.groupby(column_name).agg(column)
示例
在以下示例中,我们使用 Pandas 中的 groupby 函数根据列名 Fruits 对 DataFrame 进行分组,并在两个不同的列 'Dozens' 和 'Cost' 上执行聚合操作mean。这将返回groupby 和aggregate 函数的组合输出。
import pandas as pd data = {'Fruits': ['Papaya','Apple','Banana','Grapes','Orange','Watermelon'], 'Dozens': [25, 30, 35, 27, 32, 37], 'Cost': [500, 6000, 270, 5500, 6500, 7500]} df = pd.DataFrame(data) grouped_df = df.groupby('Fruits').agg({'Dozens': ['mean'], 'Cost': ['mean']}) print(grouped_df)
输出
以下是groupby 和aggregate 函数组合的输出。
Dozens Cost mean mean Fruits Apple 30.0 6000.0 Banana 35.0 270.0 Grapes 27.0 5500.0 Orange 32.0 6500.0 Papaya 25.0 500.0 Watermelon 37.0 7500.0
示例
在下面的示例中,我们考虑相同的数据集并根据相同的列(fruits)进行分组,并使用 agg() 函数计算列‘cost’的“min”、“max”、“sum”、“count”、“mean”值:
import pandas as pd data = {'Fruits': ['Papaya','Apple','Banana','Grapes','Orange','Watermelon'], 'Dozens': [25, 30, 35, 27, 32, 37], 'Cost': [500, 6000, 270, 5500, 6500, 7500]} df = pd.DataFrame(data) grouped_df = df.groupby('Fruits').Cost.agg(["min", "max", "sum", "count", "mean"]) print(grouped_df)
输出
当我们运行上述代码时,将显示以下输出:
min max sum count mean Fruits Apple 6000 6000 6000 1 6000.0 Banana 270 270 270 1 270.0 Grapes 5500 5500 5500 1 5500.0 Orange 6500 6500 6500 1 6500.0 Papaya 500 500 500 1 500.0 Watermelon 7500 7500 7500 1 7500.0
示例
让我们再看一个结合 groupby 和聚合函数的示例。这里我们考虑数据集“titanic.csv”数据集,并对列'Survived'和'Pclass'执行“mean”、“max”、“sum”操作,并根据列'fare'进行分组:
import pandas as pd data = pd.read_csv("https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv") data_groupby = data.groupby('Fare') data_agg = data_groupby.agg({'Survived':["mean", "max", "sum"],'Pclass':["min", "max", "sum"]}) print(data_agg)
输出
当我们运行上述代码时,将生成以下输出:Survived Pclass mean max sum min max sum Fare 0.0000 0.066667 1 1 1 3 29 4.0125 0.000000 0 0 3 3 3 5.0000 0.000000 0 0 1 1 1 6.2375 0.000000 0 0 3 3 3 6.4375 0.000000 0 0 3 3 3 ... ... .. .. ... .. .. 227.5250 0.750000 1 3 1 1 4 247.5208 0.500000 1 1 1 1 2 262.3750 1.000000 1 2 1 1 2 263.0000 0.500000 1 2 1 1 4 512.3292 1.000000 1 3 1 1 3 [248 rows x 6 columns]