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) | ? 推薦 | 刪除列索引層級 |
你可以根據實際需求選擇刪除行或列索引中的特定層級,從而更好地控制數據結構和索引布局。