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或特定列上应用一个或多个操作(函数)的特定轴上。这些数学操作用于对给定数据集进行汇总和计算统计量。 agg 是aggregate()函数的别名。
语法
以下是groupby的语法-
DataFrame.aggregate(func=None, axis=0, *args, **kwargs)
其中,
- func - 这是用于计算聚合值的函数或函数列表。
-
axis - 此值指定轴(列:0或’index’和行:1或’columns’)。
-
*args
- 传递给func的位置参数。 -
**kwargs
- 传递给func的关键字参数。
结合Groupby和多个聚合函数
我们可以在Groupby子句的结果上执行多个聚合函数,如sum、mean、min max等,使用aggregate()或agg()函数如下所示 –
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
示例
在下面的示例中,我们将考虑相同的数据集,并按相同的列 (水果) 进行分组,并使用agg()函数计算列 ‘成本’ 的“最小值”,“最大值”,“总和”,“计数”,“平均值” –
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’ 按照列 ‘fare’ 进行”mean”、”max”、”sum”等操作 –
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]