删除python pandas.DataFrame 的多重index实例

  • Post category:Python

要删除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_0level_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