用Pandas Groupby模块创建非层次化的列
在这篇文章中,我们将看到在应用groupby模块时,有几种方法可以创建非层次性的列。
我们使用财富500强公司的数据集来展示问题和解决方案。我们必须从data.world网站上抓取一个副本。
对于每个 “部门 “和 “行业”,找到总数、平均雇员和最低、最高收入变化。
让我们看看一个实现例子:
第1步:让我们开始导入pandas和以公司 “Rank “为索引的数据集。
输出:
第2步:数据集中有许多我们不感兴趣的列,如总部所在地、地址……我将把它们从数据集中删除。
输出:
方法 1:
在这个方法中,我们将使用to_flat_index方法来输出非层次化的列。让我,首先分组,确定下面的数据的列。对于每个 “部门 “和 “行业”,找到总数,平均雇员,以及最小,最大收入变化。groupby和聚合的语法如下
语法: df.groupby(['grouping column1′,' grouping column2"]).agg({ 'aggregate column1' :['aggregate function1′, 'aggregate function2' })
现在根据要求,让我们把数据集中的列名映射到语法中。
- 分组列–‘部门’、’行业’。
- 汇总列 – ‘雇员’, ‘变化’.
- 聚合函数 – ‘sum’, ‘mean’, ‘min’ “max3. 通过应用上述语法得到的结果。
实现:
输出:
看一下结果,我们有6个层次化的列,即雇员的总和和平均数(用黄色突出显示)和Revchange的最小、最大列。我们可以使用pandas 0.24版本中引入的.to_flat_index方法,将分层列转换成非分层列。
输出:
一旦函数被成功应用,所有的列都不会被扁平化,列名会被附加上聚合函数。
完整实现:
输出:
方法2:
Pandas已经引入了命名聚合对象来创建非层次化的列。我将使用上面提到的相同需求,并将其应用于命名聚合。
这个groupby方法的语法如下。
实现:
输出: