Pandas 摆脱MultiIndex
在本文中,我们将介绍如何消除Pandas数据框的MultiIndex。MultiIndex是Pandas中的一种索引形式,它能够让你将数据框分层次化,但是有时候它也会让我们感到困惑和不方便。幸运的是,Pandas提供了一些方法来轻松摆脱MultiIndex,并将数据框恢复为更传统的单级别索引形式。
阅读更多:Pandas 教程
MultiIndex的基础知识
简单来说,MultiIndex是一种具有分层次结构的索引。例如,假设我们有一张存储了某个商店每个销售日期的销售额的数据框。如果我们要计算每个月的销售总额,MultiIndex会是一个非常好的选择。
在下面的代码中,我们首先创建了一个随机的数据框,它包含了随机的销售日期和销售额。接着,我们使用MultiIndex来按月份分层次化数据框的索引。
import pandas as pd
import numpy as np
# 创建一个随机的数据框
dates = pd.date_range('20200101', periods=100)
sales = pd.Series(np.random.randint(low=100, high=1000, size=100), index=dates)
df = pd.DataFrame({'date': sales.index, 'amount': sales.values})
# 将索引设为日期,并使用MultiIndex分层次化
df = df.set_index(['date'])
df = df.groupby([df.index.year, df.index.month])['amount'].sum()
运行上述代码之后,我们得到了以下结果:
date date
2020 1 26393
2 27234
3 26466
4 24067
5 23414
6 16146
7 22606
8 22821
9 22894
10 22499
11 25973
12 24482
Name: amount, dtype: int64
这个结果显示了每个月的销售总额。我们可以看到,MultiIndex使得我们可以轻松地将数据框的索引变为按年和月分层次化的形式,使我们更容易进行数据分析。
摆脱MultiIndex
但是在某些情况下,MultiIndex可能会导致一些不必要的麻烦。在这种情况下,我们需要使用Pandas提供的一些方法来将MultiIndex变成传统的单级别索引。
reset_index()
最简单的方法就是使用reset_index()函数。这个函数可以将DataFrame的多层级索引转换为单层索引,并将多层级索引中的所有层次变成列。下面是一个使用reset_index()函数的示例:
df = df.reset_index()
这行代码会将我们之前分层次化的数据框恢复为下面这个形式:
date amount
0 2020-01-01 26393
1 2020-02-01 27234
2 2020-03-01 26466
3 2020-04-01 24067
4 2020-05-01 23414
5 2020-06-01 16146
6 2020-07-01 22606
7 2020-08-01 22821
8 2020-09-01 22894
9 2020-10-01 22499
10 2020-11-01 25973
11 2020-12-01 24482
groupby()
另一个方法是使用groupby()函数。这个函数可以根据我们指定的列来创建单层次索引。下面是使用groupby()函数的示例:
df = df.reset_index()
df = df.groupby('date')['amount'].sum()
这行代码会将之前恢复为单层级索引的数据框再次分层级索引化,但是只针对一个列进行分层级索引化。我们可以将需要分层级索引化的列作为groupby()函数的参数,将结果存储到一个新的数据框中。
最终得到的结果如下:
date
2020-01-01 26393
2020-02-01 27234
2020-03-01 26466
2020-04-01 24067
2020-05-01 23414
2020-06-01 16146
2020-07-01 22606
2020-08-01 22821
2020-09-01 22894
2020-10-01 22499
2020-11-01 25973
2020-12-01 24482
Name: amount, dtype: int64
现在,我们已经成功地将MultiIndex转换为了单级别索引。
总结
在本文中,我们介绍了MultiIndex的基础知识,并提供了两种简单的方法来消除MultiIndex,恢复为传统的单级别索引。这些方法是reset_index()和groupby()函数,它们都可以帮助我们摆脱MultiIndex,返回我们更熟悉的数据框形式,使进行数据分析变得更加方便。
极客教程