新闻中心
Pandas中如何将分组值设置为DataFrame索引并实现层级展示

本教程详细阐述了在Pandas中如何通过`set_index`方法结合`sort_index`来创建具有层级结构的DataFrame索引,从而实现数据按指定列(如'Continent')分组的视觉效果。文章澄清了`set_index`与`groupby`的区别,并提供了具体代码示例,指导读者高效地组织和访问多层索引数据。
理解Pandas中的索引与分组操作
在Pandas数据处理中,groupby()和set_index()是两个核心但功能截然不同的操作。初学者常会将它们混淆,尤其是在希望将某一列作为索引并实现数据“分组”展示时。
-
groupby()方法:其主要目的是对DataFrame进行分组,以便执行聚合操作(如求和、平均值、计数等)或进行迭代。调用groupby()本身并不会立即返回一个已分组的DataFrame,而是返回一个DataFrameGroupBy对象。这个对象需要进一步配合聚合函数(如.sum(), .mean(), .apply()等)才能生成结果。
示例:groupby的典型用法
import pandas as pd # 示例数据 data = { 'Country': ['China', 'United States', 'Japan', 'United Kingdom', 'Russian Federation', 'India', 'South Korea', 'Iran', 'Australia', 'Germany', 'France'], 'Continent': ['Asia', 'North America', 'Asia', 'Europe', 'Europe', 'Asia', 'Asia', 'Asia', 'Australia', 'Europe', 'Europe'], 'Population': [1367.64, 317.61, 127.40, 63.87, 143.50, 1276.73, 49.80, 77.07, 23.31, 80.36, 63.83] } df = pd.DataFrame(data) print("原始DataFrame头部:") print(df.head()) # 尝试直接groupby grouped_obj = df.groupby('Continent') print("\n直接调用groupby返回的是一个GroupBy对象:") print(grouped_obj) # groupby的聚合用法 continent_population_sum = df.groupby('Continent')['Population'].sum() print("\n按大洲汇总人口:") print(continent_population_sum) # groupby的迭
代用法
print("\n按大洲迭代:")
for continent, group_df in df.groupby('Continent'):
print(f"--- {continent} ---")
print(group_df) set_index()方法:此方法用于将DataFrame中的一列或多列设置为新的索引。当设置多列作为索引时,它会创建一个多级索引(MultiIndex),这正是实现数据层级展示的关键。
创建层级索引实现数据分组展示
要实现将某一列(如'Continent')作为主索引,并在其下展示相关数据,同时让主索引值只显示一次,最有效的方法是使用set_index()创建多级索引,并结合sort_index()。Pandas在显示多级索引时,会自动折叠相同的高层级索引值,使其只显示一次,从而营造出“分组”的视觉效果。
N世界
一分钟搭建会展元宇宙
138
查看详情
步骤:
- 确定索引列:选择你希望作为层级索引的列。通常,层级越高的列放在前面。
- 使用set_index():将选定的列列表传递给set_index()方法。
- 使用sort_index():为了确保相同的高层级索引值能够被Pandas正确折叠显示,通常需要对索引进行排序。
示例:将'Continent'和'Country'设置为多级索引
假设我们有以下DataFrame,它可能已经经过了一些计算,包含Country和Population以及聚合统计量:
import pandas as pd
import numpy as np
# 模拟用户"Edit"后的DataFrame结构
data_edit = {
'Country': ['China', 'Japan', 'India', 'South Korea', 'Iran', 'Australia', 'United Kingdom', 'Russian Federation', 'Germany', 'France'],
'Population': [1367.645, 127.409, 1276.730, 49.805, 77.075, 23.316, 63.870, 143.500, 80.369, 63.837],
'Continent': ['Asia', 'Asia', 'Asia', 'Asia', 'Asia', 'Australia', 'Europe', 'Europe', 'Europe', 'Europe'],
'sum': [2898.666, 2898.666, 2898.666, 2898.666, 2898.666, 23.316, 457.929, 457.929, 457.929, 457.929],
'size': [5, 5, 5, 5, 5, 1, 6, 6, 6, 6],
'mean': [579.733, 579.733, 579.733, 579.733, 579.733, 23.316, 76.321, 76.321, 76.321, 76.321],
'std': [679.097, 679.097, 679.097, 679.097, 679.097, np.nan, 34.647, 34.647, 34.647, 34.647]
}
cont_df = pd.DataFrame(data_edit)
print("原始DataFrame (可能经过计算) 头部:")
print(cont_df.head(10))
# 将'Continent'和'Country'设置为多级索引
# 注意:set_index会移除原列,如果需要保留原列,可以先复制一份或使用reset_index
cont_indexed = cont_df.set_index(['Continent', 'Country']).sort_index()
print("\n设置多级索引并排序后的DataFrame:")
print(cont_indexed)输出示例(部分):
设置多级索引并排序后的DataFrame:
Population sum size mean std
Continent Country
Asia China 1367.645 2898.666 5 579.733 679.097
India 1276.730 2898.666 5 579.733 679.097
Iran 77.075 2898.666 5 579.733 679.097
Japan 127.409 2898.666 5 579.733 679.097
South Korea 49.805 2898.666 5 579.733 679.097
Australia Australia 23.316 23.316 1 23.316 NaN
Europe France 63.837 457.929 6 7以上就是Pandas中如何将分组值设置为DataFrame索引并实现层级展示的详细内容,更多请关注其它相关文章!
# 放在
# 昆明seo优化专业公司
# 佛山营销网站怎么做推广
# 沧州东光商城网站建设
# seoul怎么读什么是seo
# 沈阳专业网站建设价格
# 合肥有哪些优化网站
# 闵行区营销推广价格
# 关键词排名搜金手指排名
# 网站做推广的团队
# 徐州专业seo平台排名
# 并在
# app
# 是在
# 的是
# 如何用
# 迭代
# 只显示
# 如何将
# 设置为
# 自定义
# 聚合函数
# 区别
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
学习通网页版官方登录 超星学习通电脑端入口指南
win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】
CSS Box Model与弹性按钮:维持布局稳定的动画实践
CSS布局:解决全屏元素100%尺寸与外边距导致的页面溢出问题
Kafka Streams中基于消息头条件过滤消息的实现指南
C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用
如何创建没有密码的Windows本地账户_跳过微软账户登录的技巧【教程】
Win11 USB传输速度慢怎么解决 Win11 USB驱动更新与设置
荒野行动PC版怎么注册_荒野行动PC版账号注册详细流程图文教程
Go RPC HTTP服务正确实现与常见陷阱解析
在Runstone环境中高效处理TasteDive API的JSON数据
在React函数组件中利用原生HTML5进行邮箱地址验证
j*a toString()的覆盖
深入理解J*aScript中的B样条曲线与节点向量生成
如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension
J*aScript设计模式实践_j*ascript代码优化
蛙漫画网页版全站入口 蛙漫热门作品免费浏览
在Go开发中优雅管理ListenAndServe进程:GoSublime集成方案
Win11怎么查看电脑配置_Win11硬件配置检测工具使用
AO3网页版最新入口合集 Archive of Our Own在线访问指南
Python vgamepad库按键模拟:正确使用XUSB_BUTTON常量
Win11输入法不见了怎么办_Windows11恢复语言栏显示方法
Excel文件在线转换快速入口 Excel在线格式转换网站
Golang如何通过reflect操作map_Golang reflect map操作与遍历技巧
圆通快递查询实时追踪 圆通物流包裹状态快速查看
如何在复杂的电商平台中优雅地管理共享资源并确保正确重定向,使用spryker-shop/resource-share-page模块助你一臂之力
HTML5原生日期选择器与jQuery UI:实现日期选择器的联动与程序化控制
Python中高效且防溢出的双曲正弦计算:基于对数空间的优化策略
深入理解rpy2中的类型转换:优化Python对象到R矩阵的映射
Basecamp怎样用留言钉固定重点_Basecamp用留言钉固定重点【重点标记】
qq浏览器如何查看和导出已保存的密码 qq浏览器密码管理器数据备份教程
Composer如何处理Git子模块(submodule)依赖_Composer与Git Submodule的对比与选择
痛风发作了怎么办? 快速止痛和后期饮食调理
《马克思佩恩3》早期版本曝光 UI设计曾多次调整!
天眼查企业查询官网入口 天眼查官方网页版查询
Go语言中JSON数据解析与字段访问教程
4399体育竞技小游戏_4399小游戏赛事入口
知乎APP怎么管理已购盐选内容_知乎APP盐选内容购买记录与查看方法
mysql备份恢复性能优化_mysql备份恢复性能优化方法
在J*a项目里如何构建对象之间的契约_接口约束的实际落地
Excel组合图表怎么做 Excel创建柱状图与折线组合图教程【图表】
vivo云服务网页版登录 怎么登录vivo云服务网页版
R星幕后开发视频泄露 包含《GTA6》等多款大作
Lar*el表单中优雅地处理“返回”按钮以规避验证:最佳实践指南
UE5.7引擎表现爆炸优化无敌!5090跑4K稳定60FPS
J*aScript数据结构转换:将对象数组按类别分组
QQ邮箱官方网站登录入口_QQ邮箱网页版在线使用
电脑IP地址怎么查 查看本机IP地址的几种方法
Vue.js 图片显示异常排查:理解应用挂载范围与DOM ID唯一性
提升屏幕阅读器对“m”时间单位的播报准确性:HTML与CSS组合解决方案


2025-11-28
浏览次数:次
返回列表
代用法
print("\n按大洲迭代:")
for continent, group_df in df.groupby('Continent'):
print(f"--- {continent} ---")
print(group_df)