如何在Pandas中对一个多索引进行分组
在这篇文章中,我们将展示如何在Pandas的多索引数据框架上使用groupby。在数据科学中,当我们进行探索性数据分析时,我们经常使用groupby来将一列的数据基于另一列进行分组。因此,我们能够分析一个列的数据是如何分组的,或者是如何基于另一个列的。还有一个替代groupby的方法,我们也可以使用Pivot Table。
groupby操作涉及分割对象、应用函数和合并结果的一些组合。这可以用来对大量的数据进行分组,并对这些组进行计算操作。任何groupby操作都涉及对原始DataFrame的以下操作之一。它们如下。
1.分割物体。
2.合并输出。
3.应用一个函数。
语法:
参数 :
- by:映射、函数、标签或表格列表
- axis : { 0 or ‘index’, 1 or ‘columns’}, default 0
- level: 级别名称
- sort : bool, default True
返回类型 :数据框GroupBy
我们必须把索引的名字,在列表中传递给groupby函数的level参数。区域 “索引是级别(0)索引,”州 “索引是级别(1)索引。在这篇文章中,我们将使用这个CSV文件。
我们来看看CSV文件
输出:
数据框架中的列:我们可以通过使用Pandas的columns属性来了解数据框架的列。
输出 :
由于DataFrame中没有索引,我们可以说这个DataFrame没有索引。首先,我们必须使这个DataFrame成为多索引DataFrame,或者分层索引DataFrame。
多索引:拥有一个以上索引的DataFrame被称为多索引DataFrame。要了解更多关于多索引的DataFrame,如何使DataFrame具有多索引,以及如何使用多索引的DataFrame进行数据探索,你可以参考这篇文章。
为了使DataFrame具有多索引,我们将使用Pandas的set_index()函数。我们将使数据框架的 “区域 “和 “状态 “列成为索引。
示例
输出 :
现在,DataFrame是一个多索引的DataFrame,有 “区域 “和 “状态 “列作为索引。
在多指标数据框架上使用Groupby操作
在这里,我们将用从0开始的编号索引来表示各层次。
输出:
我们也可以传递列的名称,而不是级别编号。
输出:
我们还可以用groupby的一些方法来探索更多。
1. apply() in groupby:
假设我们想知道每个地区有多少个州的’family_members’超过了1000。对于这种问题的陈述,我们可以使用apply()。在apply()中,我们必须传入专门为某一特定任务设计的函数类型。因此,在这种情况下,我们将使用lambda函数,这是一种在一行中编写函数的好方法。
示例:
输出:
2. agg() in groupby
agg()函数可用于执行一些统计操作,如min(), max(), mean()等。如果我们想一次执行多个统计操作,那么我们可以在列表中传递它们。
输出:
3. transform() in groupby:
transform()用于在一个给定的条件下对列进行转换。在transform函数中,我们必须传递一个负责执行特殊任务的函数。我们将使用lambda函数。
示例:
输出:
注意:有一个groupby操作的替代品,Pivot_table,它也是用来根据其他的列对第一列进行分组,但是如果我们想对分组进行统计分析,pivot table会更有用。