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


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在显示多级索引时,会自动折叠相同的高层级索引值,使其只显示一次,从而营造出“分组”的视觉效果。

Picit AI Picit AI

免费AI图片编辑器、滤镜与设计工具

Picit AI 172 查看详情 Picit AI

步骤:

  1. 确定索引列:选择你希望作为层级索引的列。通常,层级越高的列放在前面。
  2. 使用set_index():将选定的列列表传递给set_index()方法。
  3. 使用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 大鱼号  # seo标题写卖点  # seo优化省钱  # 古茗的营销与推广  # 是在  # 的是  # 滤镜  # 如何用  # 迭代  # 镜像  # 只显示  # 如何将  # 自定义  # 设置为  # 聚合函数  # app  # 建设网站男人发型推荐  # 平凉网站优化推广公司  # 预制菜的营销推广策略  # 视频营销推广员  # 陕西seo教程公司排名  # 海口徐州网站建站优化 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: Win10输入法不见了怎么办 Win10找回语言栏图标教程  12306夜间购票失败? | 查看官方公布的暂停服务公告与应对方案  漫蛙manwa官网浏览入口_漫蛙漫画网页版访问链接  搜狗浏览器如何查找页面中的文字 搜狗浏览器Ctrl+F页面搜索功能  CodeIgniter 3 连接 SQL Server:正确获取查询结果的教程  Symfony路由参数转换器:实体存在性验证与错误处理策略  C#解析并修改XML后保存 如何确保格式与编码的正确性  申通快递查询 申通物流快递单实时查询入口  PDF如何批量加注释_PDF多文件批注高亮操作教程  德邦物流在线查询系统 德邦快递货物运输追踪  谷歌学术论文搜索引擎 谷歌学术官网入口论坛永久链接  MacBook Pro词典使用指南  j*a中赋值运算符是什么?  《一起考教师》账号注销方法  《via浏览器》强制缩放网页设置方法  如何查询个人病历记录  AO3中文入口稳定分享_AO3官网HTTPS看文详解  以下哪一个是适应长期护理制度发展而设立的新职业  mysql归档数据怎么导出为csv_mysql归档数据导出为csv文件的方法  HTML与J*aScript实现下拉菜单驱动的动态表格:构建交互式维修表单  PPT页面尺寸怎么修改 PPT自定义幻灯片大小与方向设置【教程】  sublime text 4如何安装_最新版sublime下载与汉化教程  C++二维数组动态分配方法_C++指针与数组内存布局  动漫岛在线动漫网 动漫岛动漫在线观看官方入口  C++中的explicit关键字有什么作用_C++类型转换控制与explicit使用  修复UI元素交互障碍:从“开始”按钮到信息框的平滑过渡实现  狙击外星人小游戏在线链接_狙击外星人小游戏网页链接  React应用中Commerce.js数据加载与状态管理最佳实践  PHP多语言网站的实现:会话管理与翻译函数优化教程  J*aScript桌面应用_Electron多进程架构实战  胃动力不足?试试这5个调理方法  拷贝漫画2025网页版入口 拷贝漫画官网免费看全集  MongoDB聚合管道:高效统计列表中各项的文档数量  京东快递包裹信息查询入口 京东快递官方查询平台入口  天堂漫画网页版在线阅读 天堂漫画手机版入口  J*a里如何处理ArithmeticException并防止除零_算术异常防护策略解析  Python模块化编程:避免循环导入与共享函数的最佳实践  解决CSS容器溢出问题:使用calc()实现精确布局与边距控制  动漫岛汉化官网网 动漫岛官方动漫汉化地址  Win10如何查看已安装的更新补丁 Win10卸载指定更新教程【教程】  263企业邮箱如何设置邮件转发功能  微信客户端如何找回密码_微信客户端忘记密码找回方法  b站如何管理订阅_b站订阅标签分类管理  《画加》约稿流程  照片整理的黄金法则是怎样的? 理解“收集-筛选-归档-备份”四步流程  《火花chat》搜索好友方法  猫眼电影app如何筛选支持退改签的影院_猫眼电影退改签影院筛选方法  如何自定义苹果手机铃声  学习通网页版个人登录_学习通网页版个人账户登录入口  谷歌浏览器官网地址整理_谷歌浏览器新版直连2026稳定访问 

 2025-11-28

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.