当前位置: 首页 > news >正文

【Pandas】pandas DataFrame swaplevel

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, jint 或 str要交换的两个索引层级,可以是层级编号(从 0 开始)或层级名称;默认为最后两个层级(i=-2, j=-1
axis{0/'index', 1/'columns'},默认为 0指定操作的是行索引(0)还是列索引(1

✅ 返回值
  • 返回一个新的 DataFrame,其中指定的两个索引层级位置被交换;
  • 原始数据不会被修改。

🧪 示例代码及结果
示例 1:基本用法(交换行索引的两个层级)
import pandas as pd# 创建一个多级行索引 DataFrame
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
# 交换 outer 和 inner 层级
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:通过层级编号交换行索引层级
# 使用层级编号交换(原顺序是 level 0='outer', level 1='inner')
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
# 创建一个多级列索引 DataFrame
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
# 交换列索引中的 group 和 sub 层级
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:使用默认参数自动交换最后两个层级
# 默认交换最后两个层级(即 i=-2, j=-1)
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 中非常实用的索引操作方法之一,尤其适合用于多维数据分析。

相关文章:

  • uniapp 小程序 学习(二)
  • YOLOE详解【浅显易懂!】
  • 【前端基础】摩天之建的艺术:html(下)
  • 二十四、【用户管理与权限 - 篇六】前端动态展现:基于权限的菜单与按钮控制
  • 上传本地项目至github
  • KingPortal2.0安装步骤
  • 机器学习监督学习实战七:文本卷积神经网络TextCNN对中文短文本分类(15类)
  • CppCon 2016 学习:I Just Wanted a Random Integer
  • 流体力学×深度学习:当Fluent遇到神经网络,计算效率提升300%的奥秘!
  • Leetcode 刷题记录 19 —— 动态规划
  • 3分钟搭建LarkXR实时云渲染PaaS平台,实现各类3D/XR应用的一键推流
  • 氧化镱:稀土科技的“夜视高手”
  • dify私有化部署到ubuntu22.04(腾讯云为例)
  • 前缀二叉树(Trie树)详解
  • django基于Spark的国漫推荐系统
  • Early End是什么
  • Cesium快速入门到精通系列教程十:实现任意多个蜂巢似六边形组合
  • 数据结构----排序(3)
  • 接口联调阶段的移动端调试实践:从实际问题到流程协同(含WebDebugX)
  • MySQL 默认连接数
  • 天津企业设计网站建设/合肥关键词排名推广
  • 政府网站建设原则/搜索量最大的关键词
  • 网站开发功能文档/制作网站软件
  • 网站源码设计/sem培训机构
  • 个人网站这么做/南京百度seo代理
  • 李沧做网站/下载百度app免费下载安装