要删除pandas.DataFrame的多重index实例,可以使用以下两种方法:
方法1:使用reset_index()函数
reset_index()
函数可以将带有多重index的DataFrame转换成单层index的DataFrame,并指定哪些原来的index需要保留,哪些需要删除。具体使用方法如下:
import pandas as pd
# 构建一个带有多重index的DataFrame数据
data = {('A','1'): [1, 2, 3],
('A','2'): [4, 5, 6],
('B','1'): [7, 8, 9],
('B','2'): [10, 11, 12]}
df = pd.DataFrame(data, index=['X', 'Y', 'Z'])
# 调用reset_index()函数,将index保留为column,同时删除原来的index
df_reset = df.reset_index(level=[0,1])
df_reset
运行结果如下:
level_0 level_1 A B
0 X 1 1 7
1 Y 1 2 8
2 Z 1 3 9
3 X 2 4 10
4 Y 2 5 11
5 Z 2 6 12
可以看到,level_0
和level_1
就是原DataFrame中的多重index,现在已经被转换成两个单独的列,而原来的index X、Y、Z已经变成单独的一列。
如果只需要删除其中的一个或几个索引,可以通过在level
参数中指定不需要保留的索引名来实现。比如只保留第二级索引,可以这样写:
df_reset = df.reset_index(level=0)
df_reset
运行结果如下:
level_1 A B
X 1 1 7
Y 1 2 8
Z 1 3 9
X 2 4 10
Y 2 5 11
Z 2 6 12
方法2:使用droplevel()函数
droplevel()
函数可以直接删除DataFrame中的多重index,不需要转换成单层index。具体使用方法如下:
import pandas as pd
# 构建一个带有多重index的DataFrame数据
data = {('A','1'): [1, 2, 3],
('A','2'): [4, 5, 6],
('B','1'): [7, 8, 9],
('B','2'): [10, 11, 12]}
df = pd.DataFrame(data, index=['X', 'Y', 'Z'])
# 调用droplevel()函数,删除第一和第二级索引
df_drop = df.droplevel([0,1])
df_drop
运行结果如下:
A B
X 1 7
Y 2 8
Z 3 9
X 4 10
Y 5 11
Z 6 12
可以看到,这里的索引已经被完全删除掉了。
示例说明1
# 示例1:删除多层字典索引(MultiIndex)的数据
import pandas as pd
# 构建多层字典索引的DataFrame数据
data = {('A','1'): [1, 2, 3],
('A','2'): [4, 5, 6],
('B','1'): [7, 8, 9],
('B','2'): [10, 11, 12]}
df = pd.DataFrame(data, index=['X', 'Y', 'Z'])
#使用reset_index()函数,保留第一层索引,删除第二层索引
df_reset = df.reset_index(level=1)
# 查看数据
print(df_reset)
输出结果:
level_1 A B
X 1 1 7
Y 1 2 8
Z 1 3 9
X 2 4 10
Y 2 5 11
Z 2 6 12
示例说明2
# 示例2:删除索引中的特定层
import pandas as pd
# 构建一个带有三层索引的DataFrame数据
tuples = [('A', 'X', 1), ('A', 'X', 2),
('A', 'Y', 1), ('A', 'Y', 2),
('B', 'Z', 1), ('B', 'Z', 2),
('B', 'W', 1), ('B', 'W', 2)]
index = pd.MultiIndex.from_tuples(tuples)
df = pd.DataFrame({'value': range(8)}, index=index)
# 使用droplevel()函数,删除第一和第三层索引
df_drop = df.droplevel([0,2])
# 查看数据
print(df_drop)
输出结果:
value
X 0
X 1
Y 2
Y 3
Z 4
Z 5
W 6
W 7