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中的多级列索引降一级。在降级过程中,需要先创建一个新的列索引,然后将需要降级的列索引名称从列索引中移除,并将新的列索引添加进去。通过这种方式,我们可以轻松将多级列索引转换为更简单的结构,满足不同场景下的使用需求。