讲师中心 微信公众号
AI工具推荐 视频效率加速

Pandas DataFrame:将列转换为多级索引并调整层级

浅浩同学_1080

浅浩同学_1080

发布时间:2025-12-05 09:45:11

|

179人浏览过

|

来源于php中文网

原创

Pandas DataFrame:将列转换为多级索引并调整层级

本文详细介绍了如何在 pandas dataframe 中将现有列提升为新的主索引,同时保留原始索引作为次级索引,从而创建多级索引。教程通过 `set_index` 和 `swaplevel` 方法的组合应用,演示了如何灵活地重构 dataframe 的索引结构,以满足复杂的数据分析和查询需求。

在数据分析和处理中,Pandas DataFrame 提供了强大的索引功能。有时,我们可能需要将 DataFrame 中的某一列提升为索引,甚至将其作为多级索引的一部分,并调整索引的层级顺序。这种操作对于优化数据访问、分组和聚合至关重要。本文将详细讲解如何通过 set_index 和 swaplevel 这两个核心方法来实现这一目标。

理解 set_index 创建多级索引

set_index 方法是 Pandas 中用于将 DataFrame 的一个或多个列设置为索引的主要工具。当需要创建多级索引时,它的 append 参数变得尤为重要。

考虑一个初始 DataFrame,它已经有一个时间戳索引:

import pandas as pd

# 创建一个示例DataFrame
idx = pd.Index(['2022-01-03 09:00:00'], name='timestamp')
df = pd.DataFrame([[12, 3, 31]], index=idx, columns=['data', 'day_of_month', 'days_in_month'])

print("原始 DataFrame:")
print(df)

输出:

原始 DataFrame:
                     data  day_of_month  days_in_month
timestamp                                             
2022-01-03 09:00:00    12             3             31

我们的目标是将 days_in_month 列作为主索引,而 timestamp 索引作为次级索引。

首先,使用 set_index 将 days_in_month 列添加到现有索引中。为了不覆盖现有索引,而是将其作为多级索引的一部分,我们需要设置 append=True。

# 将 'days_in_month' 列添加到现有索引,创建多级索引
# append=True 确保现有索引不会被覆盖
df_multi_index = df.set_index('days_in_month', append=True)

print("\n添加 'days_in_month' 到索引后的 DataFrame:")
print(df_multi_index)

输出:

添加 'days_in_month' 到索引后的 DataFrame:
                                   data  day_of_month
timestamp           days_in_month                    
2022-01-03 09:00:00 31                 12             3

此时,我们已经成功创建了一个多级索引,其中 timestamp 是第一级索引,days_in_month 是第二级索引。然而,这与我们的最终目标(days_in_month 作为主索引,timestamp 作为次级索引)的顺序相反。

应用程序在线商店宣传网站模板
应用程序在线商店宣传网站模板

应用程序在线商店宣传网站模板是一款提供免费应用程序在线商店宣传网站模板下载。提示:本模板调用到谷歌字体库,可能会出现页面打开比较缓慢。

下载

使用 swaplevel 调整索引层级

为了调整多级索引的层级顺序,Pandas 提供了 swaplevel 方法。该方法允许我们交换指定层级的索引位置。

在上面的 df_multi_index 中,timestamp 是第 0 级索引,days_in_month 是第 1 级索引。要将 days_in_month 提升为第 0 级,将 timestamp 降为第 1 级,我们可以交换第 0 级和第 1 级。

# 使用 swaplevel 交换索引层级
# 0 代表原始的第一级索引 (timestamp)
# 1 代表原始的第二级索引 (days_in_month)
df_final = df_multi_index.swaplevel(0, 1)

print("\n交换索引层级后的最终 DataFrame:")
print(df_final)

输出:

交换索引层级后的最终 DataFrame:
                                   data  day_of_month
days_in_month timestamp                                       
31            2022-01-03 09:00:00    12             3

现在,days_in_month 已经成功地成为了主索引(第 0 级),而 timestamp 则成为了次级索引(第 1 级),这正是我们所期望的结果。

综合应用与注意事项

将上述两个步骤结合起来,可以一行代码实现:

out = df.set_index('days_in_month', append=True).swaplevel(0, 1)
print("\n一行代码实现最终结果:")
print(out)

注意事项:

  1. append=True 的重要性: 如果在 set_index 中不设置 append=True,则 days_in_month 将直接替换掉原有的 timestamp 索引,而不是创建多级索引。
  2. inplace 参数: set_index 方法支持 inplace=True 参数,可以直接修改原 DataFrame 而不返回新 DataFrame。然而,swaplevel 方法不直接支持 inplace 参数,通常需要将其结果赋值给一个新的 DataFrame 变量或覆盖原变量。
  3. 多级索引的命名: 在本例中,timestamp 和 days_in_month 都是有名字的索引层级。如果索引没有名字,Pandas 会自动为其分配默认名称或不命名。
  4. 数据访问: 创建多级索引后,可以使用 df.loc 进行更灵活的数据选择。例如,要选择 days_in_month 为 31 的所有数据,可以写 df_final.loc[31]。

总结

通过 set_index 结合 append=True 参数,我们可以将 DataFrame 的列添加到现有索引中,从而构建多级索引。随后,利用 swaplevel 方法,我们能够轻松地调整这些索引层级的顺序,以满足特定的数据组织和查询需求。掌握这两个方法,将极大地提升您在 Pandas 中处理复杂数据结构的能力,使数据分析工作更加高效和灵活。

热门AI工具

更多
Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

340

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

272

2026.01.31

Python数据分析与Pandas高级实战
Python数据分析与Pandas高级实战

本专题围绕 Python 数据分析展开,系统讲解 Pandas 的高级用法,包括数据清洗、透视表、时间序列分析以及多表合并与分组操作。通过实战案例,帮助开发者掌握高效处理与分析数据的方法,提高数据处理效率与分析能力。

751

2026.04.13

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2721

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

376

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

417

2026.01.06

C++ 数据结构与算法实现教程合集
C++ 数据结构与算法实现教程合集

以 C++ 为实现语言,系统讲解核心数据结构与算法,涵盖链表(单链表/双链表/环检测)、栈与队列(单调栈/优先队列)、二叉树(遍历/BST/AVL/红黑树)、哈希表(开地址法/链地址法)、图(邻接表/BFS/DFS/Dijkstra/拓扑排序)、常见排序算法(快排/归并/堆排/计数排序)的实现与复杂度分析,同时分享 LeetCode 刷题技巧、竞赛编程常用模板(二分/前缀和/滑动窗口/动态规划),帮助开发者夯实算法基础。

472

2026.05.09

append用法
append用法

append是一个常用的命令行工具,用于将一个文件的内容追加到另一个文件的末尾。想了解更多append用法相关内容,可以阅读本专题下面的文章。

618

2023.10.25

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

100

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app从入门到实战教程
uni-app从入门到实战教程

共0课时 | 0人学习

uni-app x harmony开发指南
uni-app x harmony开发指南

共0课时 | 0人学习

uni-app鸿蒙运行和发行
uni-app鸿蒙运行和发行

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn