Pandas2.2 DataFrame
Reshaping sorting transposing
方法 | 描述 |
---|
DataFrame.droplevel(level[, axis]) | 用于**从 DataFrame 的索引(行或列)中删除指定层级(level)**的方法 |
pandas.DataFrame.droplevel()
pandas.DataFrame.droplevel()
是一个用于**从 DataFrame
的索引(行或列)中删除指定层级(level)**的方法。它通常用于处理具有多级索引(MultiIndex)的 DataFrame
,可以灵活地移除不需要的索引层级。
📌 方法签名
DataFrame.droplevel(level, axis=0)
🔧 参数说明
参数 | 类型 | 说明 |
---|
level | int、str 或 list of int/str | 要删除的索引层级,可以是层级编号(从 0 开始)或层级名称 |
axis | {0/'index', 1/'columns'} ,默认为 0 | 指定操作的是行索引(0 )还是列索引(1 ) |
✅ 返回值
- 返回一个新的
DataFrame
,其中指定的索引层级被删除; - 原始数据不会被修改,除非设置
inplace=True
。
🧪 示例代码及结果
示例 1:基本用法 - 删除行索引中的某一层
import pandas as pd
import numpy as np
arrays = [['A', 'A', 'B', 'B'],['one', 'two', 'one', 'two']
]
index = pd.MultiIndex.from_arrays(arrays, names=('outer', 'inner'))
df = pd.DataFrame({'data': [1, 2, 3, 4]}, index=index)print("Original DataFrame:")
print(df)
输出:
data
outer inner
A one 1two 2
B one 3two 4
df_dropped = df.droplevel('inner')
print("\nAfter droplevel('inner'):")
print(df_dropped)
输出:
data
outer
A 1
A 2
B 3
B 4
示例 2:删除多个层级
arrays = [['X', 'X', 'Y', 'Y'],['a', 'b', 'a', 'b']
]
columns = pd.MultiIndex.from_arrays(arrays, names=('group', 'sub'))
df_multi_col = pd.DataFrame(np.random.randn(2, 4), columns=columns)print("Original Multi-column DataFrame:")
print(df_multi_col)
输出示例(随机数):
group X Y
sub a b a b
0 0.496714 -0.138264 0.647689 1.523030
1 -0.234137 1.579213 0.767435 -0.469474
df_dropped_cols = df_multi_col.droplevel('sub', axis=1)
print("\nAfter droplevel('sub', axis=1):")
print(df_dropped_cols)
输出示例:
group X Y
0 0.496714 0.647689
1 -0.234137 0.767435
示例 3:通过层级编号删除
df_dropped_by_index = df.droplevel(0)
print("\nAfter droplevel(0):")
print(df_dropped_by_index)
输出:
data
inner
one 1
two 2
one 3
two 4
🧠 应用场景
场景 | 说明 |
---|
简化多级索引结构 | 移除不必要的索引层级以提升可读性 |
准备数据导出 | 在输出到 CSV、Excel 等格式前清理索引 |
重塑数据结构 | 配合 stack() / unstack() 进行更复杂的索引变换 |
数据分析前预处理 | 清理冗余索引层级以便后续分析 |
⚠️ 注意事项
droplevel()
不会修改原始数据,除非设置 inplace=True
;- 可以通过层级名或层级编号进行删除;
- 支持一次删除多个层级(传入列表);
- 适用于行索引(
axis=0
)和列索引(axis=1
); - 如果删除后只剩一个层级,索引将变为普通
Index
而非 MultiIndex
。
✅ 总结对比
方法 | 是否推荐使用 | 说明 |
---|
droplevel(level) | ✅ 推荐 | 快速删除指定索引层级 |
droplevel(level, axis=1) | ✅ 推荐 | 删除列索引层级 |
你可以根据实际需求选择删除行或列索引中的特定层级,从而更好地控制数据结构和索引布局。