如何在Pandas中扁平化MultiIndex(附实例)

603 阅读2分钟

你可以使用下面的基本语法在pandas中平铺一个MultiIndex。

#flatten all levels of MultiIndex
df.reset_index(inplace=True)

#flatten specific levels of MultiIndex
df.reset_index(inplace=True, level = ['level_name'])

下面的例子展示了如何在实践中使用这种语法。

例1:扁平化pandas中的所有级别的MultiIndex

假设我们有如下的MultiIndex pandas DataFrame:

import pandas as pd

#create DataFrame
index_names = pd.MultiIndex.from_tuples([('Level1','Lev1', 'L1'),
                                       ('Level2','Lev2', 'L2'),
                                       ('Level3','Lev3', 'L3'),
                                       ('Level4','Lev4', 'L4')],
                                       names=['Full','Partial', 'ID'])

data = {'Store': ['A','B','C','D'],
        'Sales': [12, 44, 29, 35]}

df = pd.DataFrame(data, columns = ['Store','Sales'], index=index_names)

#view DataFrame
df

			Store	Sales
Full	Partial	ID		
Level1	Lev1	L1	A	17
Level2	Lev2	L2	B	22
Level3	Lev3	L3	C	29
Level4	Lev4	L4	D	35

我们可以使用下面的语法将MultiIndex的每一层都平铺到DataFrame的列中:

#flatten every level of MultiIndex 
df.reset_index(inplace=True)

#view updated DataFrame
df

        Full	Partial	ID	Store	Sales
0	Level1	Lev1	L1	A	12
1	Level2	Lev2	L2	B	44
2	Level3	Lev3	L3	C	29
3	Level4	Lev4	L4	D	35

注意,MultiIndex的每一级现在都是DataFrame中的一列。

例2:在Pandas中扁平化MultiIndex的特定层级

假设我们有和前面例子一样的pandas DataFrame:

#view DataFrame
df

			Store	Sales
Full	Partial	ID		
Level1	Lev1	L1	A	12
Level2	Lev2	L2	B	44
Level3	Lev3	L3	C	29
Level4	Lev4	L4	D	35

下面的代码显示了如何平铺MultiIndex的一个特定层次:

#flatten 'ID' level only
df.reset_index(inplace=True, level = ['ID'])

#view updated DataFrame
df

		ID	Store	Sales
Full	Partial			
Level1	Lev1	L1	A	12
Level2	Lev2	L2	B	44
Level3	Lev3	L3	C	29
Level4	Lev4	L4	D	35

下面的代码显示了如何平坦MultiIndex的几个特定层次:

#flatten 'ID' level only
df.reset_index(inplace=True, level = ['Partial', 'ID'])

#view updated DataFrame
df

	Partial	 ID	Store	Sales
Full				
Level1	Lev1	 L1	A	12
Level2	Lev2	 L2	B	44
Level3	Lev3	 L3	C	29
Level4	Lev4	 L4	D	35

其他资源

下面的教程解释了如何在pandas中执行其他常用功能:

如何在Pandas中把索引转换为列
如何在Pandas中重命名索引
如何在Pandas中把列设为索引