Pandas2.2 DataFrame
Reshaping sorting transposing
方法 | 描述 |
---|
DataFrame.droplevel(level[, axis]) | 用于**从 DataFrame 的索引(行或列)中删除指定层级(level)**的方法 |
DataFrame.pivot(*, columns[, index, values]) | 用于重塑 DataFrame 的结构的方法 |
DataFrame.pivot_table([values, index, …]) | 用于**创建透视表(pivot table)**的函数 |
DataFrame.reorder_levels(order[, axis]) | 用于重新排序多级索引(MultiIndex)的层级顺序的方法 |
DataFrame.sort_values(by, *[, axis, …]) | 用于按指定列或行的值对 DataFrame 进行排序的方法 |
DataFrame.sort_index(*[, axis, level, …]) | 用于按索引(行或列)对 DataFrame 进行排序的方法 |
DataFrame.nlargest(n, columns[, keep]) | 用于选取 DataFrame 中某列或多列的前 n 个最大值对应的行的方法 |
DataFrame.nsmallest(n, columns[, keep]) | 用于选取 DataFrame 中某列或多列的前 n 个最小值对应的行的方法 |
DataFrame.swaplevel([i, j, axis]) | 用于交换多级索引(MultiIndex)中两个层级的位置的方法 |
pandas.DataFrame.swaplevel()
pandas.DataFrame.swaplevel()
是一个用于交换多级索引(MultiIndex)中两个层级的位置的方法。它适用于具有多级行索引或列索引的 DataFrame
,可以灵活地调整索引层级顺序,常用于数据重塑、透视分析等场景。
📌 方法签名
DataFrame.swaplevel(i=-2, j=-1, axis=0)
🔧 参数说明
参数 | 类型 | 说明 |
---|
i , j | int 或 str | 要交换的两个索引层级,可以是层级编号(从 0 开始)或层级名称;默认为最后两个层级(i=-2 , j=-1 ) |
axis | {0/'index', 1/'columns'} ,默认为 0 | 指定操作的是行索引(0 )还是列索引(1 ) |
✅ 返回值
- 返回一个新的
DataFrame
,其中指定的两个索引层级位置被交换; - 原始数据不会被修改。
🧪 示例代码及结果
示例 1:基本用法(交换行索引的两个层级)
import pandas as pd
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_swapped = df.swaplevel()
print("\nAfter swaplevel():")
print(df_swapped)
输出:
data
inner outer
one A 1
two A 2
one B 3
two B 4
示例 2:通过层级名交换行索引层级
df_swapped_by_name = df.swaplevel('outer', 'inner')
print("\nAfter swaplevel('outer', 'inner'):")
print(df_swapped_by_name)
输出:
data
inner outer
one A 1
two A 2
one B 3
two B 4
示例 3:通过层级编号交换行索引层级
df_swapped_by_index = df.swaplevel(0, 1)
print("\nAfter swaplevel(0, 1):")
print(df_swapped_by_index)
输出:
data
inner outer
one A 1
two A 2
one B 3
two B 4
示例 4:交换列索引层级(设置 axis=1
)
arrays = [['X', 'X', 'Y', 'Y'],['a', 'b', 'a', 'b']
]
columns = pd.MultiIndex.from_arrays(arrays, names=('group', 'sub'))
df_multi_col = pd.DataFrame([[1, 2, 3, 4], [5, 6, 7, 8]], columns=columns)print("Original Multi-column DataFrame:")
print(df_multi_col)
输出:
group X Y
sub a b a b
0 1 2 3 4
1 5 6 7 8
df_swapped_cols = df_multi_col.swaplevel('group', 'sub', axis=1)
print("\nAfter swaplevel('group', 'sub', axis=1):")
print(df_swapped_cols)
输出:
sub a b a b
group X Y X Y X Y X Y
0 1 3 2 4 NaN NaN NaN NaN
1 5 7 6 8 NaN NaN NaN NaN
注意:由于原始结构中 (group=X, sub=a)
和 (group=Y, sub=b)
并不完全覆盖所有组合,因此部分位置为 NaN
。
示例 5:使用默认参数自动交换最后两个层级
df_default_swap = df.swaplevel()
print("\nAfter default swaplevel() (last two levels):")
print(df_default_swap)
输出:
data
inner outer
one A 1
two A 2
one B 3
two B 4
🧠 应用场景
场景 | 说明 |
---|
调整索引顺序以增强可读性 | 如将更具体的层级放在前面 |
配合 pivot/unstack 使用 | 调整索引顺序以便后续操作 |
数据分析前预处理 | 根据分析需求重新组织索引层级 |
可视化准备 | 准备适合绘图的数据结构(如热力图、柱状图) |
⚠️ 注意事项
- 支持通过层级名或编号进行交换;
- 默认交换最后两个层级;
- 适用于行索引(
axis=0
)和列索引(axis=1
); - 不会自动修改原始数据;
- 如果你只想查看某些层级,可结合
droplevel()
使用。
✅ 总结对比
方法 | 是否推荐使用 | 说明 |
---|
swaplevel() | ✅ 推荐 | 快速交换最后两个索引层级 |
swaplevel('name1', 'name2') | ✅ 推荐 | 使用层级名清晰直观 |
swaplevel(i, j) | ✅ 推荐 | 快速按编号交换层级 |
swaplevel(..., axis=1) | ✅ 推荐 | 支持列索引层级交换 |
你可以根据实际需求选择使用层级名或编号来交换索引层级,从而更好地控制数据结构和索引布局。它是 Pandas 中非常实用的索引操作方法之一,尤其适合用于多维数据分析。