如何在 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]
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP