如何在 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 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.