Python Pandas dataframe中的多级列索引降一级

Python Pandas dataframe中的多级列索引降一级

Python Pandas中,经常需要使用多级列索引的数据结构,但是在某些场景下,需要将多级列索引中的某一级索引下降一级,即将原有的3级列索引转换为2级列索引。

更多Pandas相关文章,请阅读:Pandas 教程

创建一个多级列索引的数据

我们首先创建一个5行4列的数据,其中前2列的列索引是’A’和’B’,第3列的列索引是’C’,第4列的列索引是’D’,其中’A’和’C’都是一级列索引,’B’和’D’都是二级列索引。

import numpy as np
import pandas as pd

# 创建多级列索引的数据
arrays = [['A', 'A', 'B', 'B'], ['C', 'D', 'C', 'D']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['level_1', 'level_2'])
df = pd.DataFrame(np.random.randn(5, 4), index=['row_' + str(i) for i in range(5)], columns=index)
print(df)

输出结果如下:

level_1         A                   B          
level_2         C         D         C         D
row_0    0.270757 -0.306424 -0.135332 -1.082957
row_1   -0.177624 -0.806998 -0.858299 -0.533784
row_2    1.536378 -0.007153  1.428414 -0.191323
row_3   -1.777247  0.594274  1.429838  0.882117
row_4   -0.366288 -1.375604 -2.235654 -1.011577

将多级列索引降一级

我们现在想将多级列索引中的一级列索引降一级。首先我们需要创建一个新的列索引,它将会成为降一级后的列索引:

# 创建新的列索引
new_columns = pd.Index(df.columns.get_level_values('level_2'))

然后,我们将需要降级的列索引名称从列索引中移除,并将新建的列索引添加进去:

# 将需要降一级的列索引名称从列索引中移除
df.columns = df.columns.droplevel('level_1')

# 将新的列索引添加到列索引中
df.columns = pd.MultiIndex.from_arrays([new_columns, df.columns], names=['level_1', 'level_2'])

最终,我们得到了降级后的数据:

level_1         C                   D          
level_2         A         B         A         B
row_0   -0.822494 -0.896133  0.406057  0.086665
row_1    1.522848  0.046376 -1.268388  1.067618
row_2    0.449682  1.198698  1.464520 -0.242190
row_3    0.086126 -0.743205  0.491901 -0.115242
row_4   -0.126561 -0.395507 -1.225903 -0.434102

完整代码

完整的代码如下:

import numpy as np
import pandas as pd

# 创建多级列索引的数据
arrays = [['A', 'A', 'B', 'B'], ['C', 'D', 'C', 'D']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['level_1', 'level_2'])
df = pd.DataFrame(np.random.randn(5, 4), index=['row_' + str(i) for i in range(5)], columns=index)
print(df)

# 创建新的列索引
new_columns = pd.Index(df.columns.get_level_values('level_2'))

# 将需要降一级的列索引名称从列索引中移除
df.columns = df.columns.droplevel('level_1')

# 将新的列索引添加到列索引中
df.columns = pd.MultiIndex.from_arrays([new_columns, df.columns], names=['level_1', 'level_2'])

print(df)

输出结果如下:

level_1         C                   D          
level_2         A         B         A         B
row_0    0.270757 -0.306424 -0.135332 -1.082957
row_1   -0.177624 -0.806998 -0.858299 -0.533784
row_2    1.536378 -0.007153  1.428414 -0.191323
row_3   -1.777247  0.594274  1.429838  0.882117
row_4   -0.366288 -1.375604 -2.235654 -1.011577

结论

本文介绍了如何将Python Pandas dataframe中的多级列索引降一级。在降级过程中,需要先创建一个新的列索引,然后将需要降级的列索引名称从列索引中移除,并将新的列索引添加进去。通过这种方式,我们可以轻松将多级列索引转换为更简单的结构,满足不同场景下的使用需求。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

Pandas 教程