Pandas DataFrame groupby()函数
1.Pandas groupby()函数
Pandas DataFrame groupby()函数用于对具有相同值的行进行分组。
它通常与汇总函数(计数,总和,最小值,最大值,平均值)一起使用,以基于一个或者多个列值获取统计信息。
Pandas gropuby()函数与SQL group by语句非常相似。
毕竟,DataFrame和SQL Table也几乎相似。
这是一种中介功能,可以在达到最终结果之前创建组。
2.拆分应用合并
也称为拆分应用合并流程。
groupby()函数根据某些条件拆分数据。
将聚合函数应用于每个组,然后组合在一起以创建结果DataFrame。
下图通过一个简单的示例说明了此行为。
拆分应用合并示例
3. Pandas DataFrame groupby()语法
groupby()函数的语法为:
groupby( self, by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False, **kwargs )
by参数确定分组元素的方式。
通常,列名用于按DataFrame元素进行分组。axis参数确定是对行还是对列进行处理。
该级别与MultiIndex(分层)一起使用,以按一个或者多个特定级别分组。
as_index指定返回以组标签为索引的聚合对象。
sort参数用于对组密钥进行排序。
我们可以将其作为False传递,以使用较大的DataFrame对象获得更好的性能。group_keys:调用apply时,将组密钥添加到索引以标识片段。
挤压:如果可能,减小返回类型的维数,否则返回一致的类型。
已观察到:如果为True:仅显示分类石斑鱼的观察值。
如果为False:显示分类石斑鱼的所有值。** kwargs:仅接受关键字参数" mutated",并传递给groupby。
groupby()函数根据调用对象返回DataFrameGroupBy或者SeriesGroupBy。
4.Pandas groupby()示例
假设我们有一个包含以下内容的CSV文件。
ID,Name,Role,Salary 1,hyman,Editor,10000 2,Lisa,Editor,8000 3,David,Author,6000 4,Ram,Author,4000 5,Anupam,Author,5000
我们将使用Pandas的read_csv()函数来读取CSV文件并创建DataFrame对象。
import pandas as pd df = pd.read_csv('records.csv') print(df)
输出:
ID Name Role Salary 0 1 hyman Editor 10000 1 2 Lisa Editor 8000 2 3 David Author 6000 3 4 Ram Author 4000 4 5 Anupam Author 5000
4.1)平均工资按角色分组
我们想根据员工的角色知道他们的平均工资。
因此,我们将使用groupby()函数根据"角色"列创建组。
然后调用聚合函数mean()来计算平均值并产生结果。
由于我们不需要ID和Name列,因此我们将从输出中将其删除。
df_groupby_role = df.groupby(['Role']) # select only required columns df_groupby_role = df_groupby_role[["Role", "Salary"]] # get the average df_groupby_role_mean = df_groupby_role.mean() print(df_groupby_role_mean)
输出:
Salary Role Author 5000 Editor 9000
输出中的索引看起来不太好。
我们可以通过调用reset_index()函数来修复它。
df_groupby_role_mean = df_groupby_role_mean.reset_index() print(df_groupby_role_mean)
输出:
Role Salary 0 Author 5000 1 Editor 9000
4.2)按角色支付的总工资
在此示例中,我们将计算为每个角色支付的薪水。
df_salary_by_role = df.groupby(['Role'])[["Role", "Salary"]].sum().reset_index() print(df_salary_by_role)
输出:
Role Salary 0 Author 15000 1 Editor 18000
此示例看起来很简单,因为所有操作都在一行中完成。
在前面的示例中,为清晰起见,我对步骤进行了划分。
4.3)按角色划分的员工总数
我们可以使用size()聚合函数来获取此数据。
df_size_by_role = df.groupby(['Role']).size().reset_index() df_size_by_role.columns.values[1] = 'Count' # renaming the size column print(df_size_by_role)
输出:
Role Count 0 Author 3 1 Editor 2