如何在 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。这将返回groupbyaggregate 函数的组合输出。

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)

输出

以下是groupbyaggregate 函数组合的输出。

  	   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]

更新于: 2023年8月9日

736 次浏览

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告