Pandas 摆脱MultiIndex

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,返回我们更熟悉的数据框形式,使进行数据分析变得更加方便。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程