Pandas DataFrame复杂重塑:多列转行与动态列生成技巧

Pandas DataFrame复杂重塑:多列转行与动态列生成技巧

本文深入探讨了如何利用Pandas实现DataFrame的复杂重塑,特别是将现有数据列(如’A’和’B’)转换为新的类别行,同时将另一列(如’Item’)的值动态生成为新的列标题。通过结合pivot、stack和reset_index等核心函数,本教程提供了一种高效且灵活的方法,帮助用户解决多值列转行再转列的特定数据转换需求,从而优化数据结构以适应后续分析。

在数据分析和处理中,pandas dataframe的重塑操作是常见的需求。然而,当面临将现有数据列转换为新的类别行,并同时依据另一列的值动态生成新列的复杂场景时,传统的pivot或melt函数可能无法直接满足需求。本教程将详细介绍如何通过巧妙地组合使用pivot、stack和reset_index等pandas函数,实现这种高级的dataframe重塑。

初始数据结构与目标转换

假设我们有一个DataFrame,其结构如下所示:

Date Item A B

11a1b112a2b213a3b3

我们期望将其重塑为以下结构:

Date Letter Item 1 Item 2 Item 3

1Aa1a2a31Bb1b2b3

在这个转换中,原始DataFrame的’A’和’B’列需要转换为一个新的’Letter’列下的行值,而’Item’列的各个值(1, 2, 3)则需要成为新的列标题(Item 1, Item 2, Item 3)。

逐步实现复杂重塑

为了实现上述转换,我们将组合使用pivot、stack和reset_index函数。

首先,我们创建示例数据:

import pandas as pdimport iodata = """Date,Item,A,B1,1,a1,b11,2,a2,b21,3,a3,b3"""df = pd.read_csv(io.StringIO(data))print("原始DataFrame:")print(df)

输出:

原始DataFrame:   Date  Item   A   B0     1     1  a1  b11     1     2  a2  b22     1     3  a3  b3

1. 使用 pivot 进行初步重塑

第一步是使用pivot函数将Item列的值转换为新的列。我们将Date作为索引,Item作为新的列,而A和B列则作为值。

pivoted_df = df.pivot(index='Date', columns='Item')print("nPivot 后的 DataFrame:")print(pivoted_df)

输出:

Pivot 后的 DataFrame:       A        B      Item   1   2   3  1   2   3Date                     1     a1  a2  a3  b1  b2  b3

此时,我们得到了一个带有MultiIndex列的DataFrame。顶层索引是原始的列名(’A’, ‘B’),第二层索引是Item的值(1, 2, 3)。

2. 使用 stack 将列级别转换为行级别

接下来,我们需要将MultiIndex列的第一级(’A’和’B’)转换为一个新的行级别,这正是stack()函数的作用。stack(0)表示将MultiIndex列的第一级(索引为0的级别)转换为新的行索引。

stacked_df = pivoted_df.stack(0)print("nStack(0) 后的 DataFrame:")print(stacked_df)

输出:

Stack(0) 后的 DataFrame:        1   2   3Date             1    A  a1  a2  a3     B  b1  b2  b3

现在,我们看到Date和新的列名(即原始的’A’和’B’,现在是索引的一部分)构成了MultiIndex行。

3. 使用 add_prefix 统一列名

为了满足目标格式中“Item 1”、“Item 2”等列名,我们需要为当前的列名(1, 2, 3)添加前缀。

prefixed_df = stacked_df.add_prefix('Item ')print("nAdd_prefix 后的 DataFrame:")print(prefixed_df)

输出:

Add_prefix 后的 DataFrame:        Item 1 Item 2 Item 3Date                       1    A      a1     a2     a3     B      b1     b2     b3

4. 使用 reset_index 将索引转换为列

最后一步是将当前的MultiIndex行转换为常规的列。reset_index()函数可以实现这一点。我们可以通过names参数为新生成的列指定名称。

final_df = prefixed_df.reset_index(names=['Date', 'Letter'])print("nReset_index 后的最终 DataFrame:")print(final_df)

输出:

Reset_index 后的最终 DataFrame:   Date Letter Item 1 Item 2 Item 30     1      A     a1     a2     a31     1      B     b1     b2     b3

至此,我们已经成功地将DataFrame重塑为目标格式。

完整代码示例

将上述步骤整合到一起,完整的解决方案代码如下:

import pandas as pdimport io# 原始数据data = """Date,Item,A,B1,1,a1,b11,2,a2,b21,3,a3,b3"""df = pd.read_csv(io.StringIO(data))# 复杂重塑操作output_df = (df.pivot(columns='Item', index='Date') # 1. 以Item为列,Date为索引进行透视             .stack(0)                              # 2. 将MultiIndex列的第一级(A, B)转换为行索引             .add_prefix('Item ')                   # 3. 为新生成的Item列添加前缀             .reset_index(names=['Date', 'Letter']))# 4. 将MultiIndex行转换为常规列,并命名print("原始DataFrame:")print(df)print("n重塑后的DataFrame:")print(output_df)

注意事项与总结

理解MultiIndex: 这种复杂重塑的核心在于对Pandas MultiIndex(多级索引)的理解和操作。pivot通常会生成MultiIndex列,而stack则用于将列级别转换为行级别,反之unstack用于将行级别转换为列级别。stack() 的 level 参数: stack(0)中的0表示将MultiIndex列的第一个级别(最外层)转换为行索引。如果有多层MultiIndex列,可以根据需要指定不同的级别。列名冲突: 在执行pivot操作时,如果values参数未指定,Pandas会尝试将所有非index和columns的列作为值进行透视,这可能会导致MultiIndex列的生成。灵活性: 这种组合方法非常灵活,可以适应多种复杂的DataFrame重塑场景,特别是当需要将某些特征列转换为分类标签,并同时根据其他标识符创建动态列时。

通过本教程的学习,您应该能够掌握如何利用Pandas的pivot、stack和reset_index函数,有效地解决DataFrame的复杂重塑问题,从而更好地组织和分析数据。

以上就是Pandas DataFrame复杂重塑:多列转行与动态列生成技巧的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1370774.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Python中的*args和kwargs是什么_Python *args与kwargs用法详解
上一篇 2025年12月14日 10:50:17
python如何获取当前函数的名字_python获取当前函数名称的方法
下一篇 2025年12月14日 10:50:33

相关推荐

  • Chrome浏览器怎么清理“最近关闭的标签页”列表_“最近关闭”历史记录清除方法

    Chrome浏览器怎么清理“最近关闭的标签页”列表_“最近关闭”历史记录清除方法Chrome浏览器怎么清理“最近关闭的标签页”列表_“最近关闭”历史记录清除方法Chrome浏览器怎么清理“最近关闭的标签页”列表_“最近关闭”历史记录清除方法Chrome浏览器怎么清理“最近关闭的标签页”列表_“最近关闭”历史记录清除方法

    可通过清除浏览数据、手动删除特定条目或重启浏览器清理“最近关闭的标签页”列表。 如果您在使用Chrome浏览器时希望清理“最近关闭的标签页”列表,以保护隐私或整理浏览历史,可以通过以下多种方法进行操作。 本文运行环境:MacBook Pro,macOS Sonoma 一、清除全部浏览数据以移除最近关…

    2026年9月24日 用户投稿
    000
  • 苹果手机怎么截长图 苹果手机截长图的方法

    苹果手机怎么截长图 苹果手机截长图的方法苹果手机怎么截长图 苹果手机截长图的方法苹果手机怎么截长图 苹果手机截长图的方法苹果手机怎么截长图 苹果手机截长图的方法

    苹果手机截取长图的方法有两种:一是滚动截屏,二是使用第三方应用程序如 Tailor、Stitch It! 或 Scrolling Screenshot。 苹果手机截长图的方法 苹果手机提供了两种截取长图的方法: 方法一:滚动截屏 截取屏幕的第一部分。点击并按住屏幕截图预览。轻扫手指到想要截取的区域末…

    2026年9月24日 用户投稿
    100
  • 受益被投资企业公允值增加,四川长虹H1净利润同比预增56.53%到103.59%

    受益被投资企业公允值增加,四川长虹H1净利润同比预增56.53%到103.59%受益被投资企业公允值增加,四川长虹H1净利润同比预增56.53%到103.59%受益被投资企业公允值增加,四川长虹H1净利润同比预增56.53%到103.59%受益被投资企业公允值增加,四川长虹H1净利润同比预增56.53%到103.59%

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 7月11日,四川长虹发布2025年上半年业绩预告。预计2025年半年度实现归属于母公司所有者的净利润为43,900万元至57,100万元,较去年同期增长15,853.41万元至29,053.41…

    2026年9月24日 用户投稿
    000
  • 快手账号如何实名认证_快手账号实名认证的步骤与要求

    快手账号如何实名认证_快手账号实名认证的步骤与要求快手账号如何实名认证_快手账号实名认证的步骤与要求快手账号如何实名认证_快手账号实名认证的步骤与要求快手账号如何实名认证_快手账号实名认证的步骤与要求

    未完成实名认证将限制快手直播和视频发布功能。个人用户需通过身份证认证并可能配合人脸识别,企业用户则需提交营业执照及完成对公打款验证,审核通过后方可开通权限。 如果您已经注册了快手账号,但发现无法开通直播或发布某些视频,很可能是因为尚未完成实名认证。实名认证是使用快手核心功能的前提,未认证账号将受到多…

    2026年9月24日 用户投稿
    200
  • ubuntu compton减少延迟策略

    compton 是 ubuntu 的一个轻量级窗口合成器,通常用于实现透明度和合成效果。然而,compton 可能会导致一些延迟,特别是在资源受限的系统上。以下是一些减少 compton 延迟的策略: 降低合成分辨率:通过降低 Compton 的合成分辨率,可以减少处理负担,从而减少延迟。可以在 C…

    2026年9月24日
    000
  • Android应用中通过下载链接从Firebase Storage下载文件教程

    Android应用中通过下载链接从Firebase Storage下载文件教程Android应用中通过下载链接从Firebase Storage下载文件教程Android应用中通过下载链接从Firebase Storage下载文件教程Android应用中通过下载链接从Firebase Storage下载文件教程

    本教程详细介绍了在Android应用中如何利用文件的下载URL,结合Android DownloadManager将Firebase Storage中的文件下载到用户设备指定目录。内容涵盖必要的运行时权限处理、清单文件配置以及DownloadManager的具体使用方法,旨在帮助开发者实现本地文件存…

    2026年9月24日 用户投稿
    200
  • 金庸群侠首选肉盾!黄蓉血防流终极培养方案

    金庸群侠首选肉盾!黄蓉血防流终极培养方案金庸群侠首选肉盾!黄蓉血防流终极培养方案金庸群侠首选肉盾!黄蓉血防流终极培养方案金庸群侠首选肉盾!黄蓉血防流终极培养方案

    在群侠并起的江湖中,黄蓉绝对是顶尖的防御核心!作为甲级弟子中血量成长最高的存在,搭配稳居前五的强悍防御成长,她天生就是为血防路线而生的绝世肉盾。虽然攻击属性稍弱,但凭借后期惊人的血量和防御优势,她能稳稳磨垮对手,在对位单挑中完成致命一击! 天生肉盾!甲级血牛的核心定位 黄蓉的成长属性已经决定了她的江…

    2026年9月24日 用户投稿
    100
  • 163邮箱官网手机免费入口 163免费邮箱移动登录

    163邮箱官网手机免费入口 163免费邮箱移动登录163邮箱官网手机免费入口 163免费邮箱移动登录163邮箱官网手机免费入口 163免费邮箱移动登录163邮箱官网手机免费入口 163免费邮箱移动登录

    163邮箱官网手机免费入口可通过访问mail.163.com自动跳转至移动版,或在应用商店下载“网易邮箱”App登录,支持多账号管理、邮件收发、附件添加、消息推送及多设备同步,并提供登录保护、主题自定义和垃圾邮件过滤等安全与个性化功能。 163邮箱官网手机免费入口在哪里?这是不少网友都关注的,接下来…

    2026年9月24日 用户投稿
    000
  • swoole应用于什么

    swoole应用于什么swoole应用于什么swoole应用于什么swoole应用于什么

    Swoole可以广泛应用于互联网、移动通信、企业软件、网络游戏、物联网、车联网、智能家庭等领域。 使用PHP+Swoole作为网络通信框架,可以使企业IT研发团队的效率大大提升,更加专注于开发创新产品。 Swoole底层内置了异步非阻塞、多线程的网络IO服务器。PHP程序员仅需处理事件回调即可,无需…

    2026年9月24日 用户投稿
    100
  • Chrome浏览器书签栏怎么一直显示_设置Chrome书签栏永久显示教程

    Chrome浏览器书签栏怎么一直显示_设置Chrome书签栏永久显示教程Chrome浏览器书签栏怎么一直显示_设置Chrome书签栏永久显示教程Chrome浏览器书签栏怎么一直显示_设置Chrome书签栏永久显示教程Chrome浏览器书签栏怎么一直显示_设置Chrome书签栏永久显示教程

    通过点击Chrome右上角三点菜单,选择“书签”>“显示书签栏”可恢复书签栏;2. 使用Ctrl+Shift+B(Windows)或Command+Shift+B(Mac)快捷键快速切换显示;3. 在设置页面的“外观”中确保“显示书签栏”设为“始终显示”;4. 若无效,可重置浏览器设置以恢复默…

    2026年9月24日 用户投稿
    000
  • 学好mysql数据库能找到什么工作

    学好mysql数据库能找到什么工作学好mysql数据库能找到什么工作学好mysql数据库能找到什么工作学好mysql数据库能找到什么工作

    掌握 MySQL 数据库可为求职者带来众多工作机会,包括数据库管理员、数据库开发人员、数据分析师、数据科学家、商业智能分析师、软件工程师、Web 开发人员、测试工程师和数据挖掘工程师。 学好 MySQL 数据库能找到哪些工作? 精通 MySQL 数据库可为求职者创造众多职业机会,包括: 数据库管理员…

    2026年9月24日 用户投稿
    200
  • 苹果手机充电器不支持此配件怎么办 苹果手机充电器不支持此配件解决方法

    苹果手机充电器不支持此配件怎么办 苹果手机充电器不支持此配件解决方法苹果手机充电器不支持此配件怎么办 苹果手机充电器不支持此配件解决方法苹果手机充电器不支持此配件怎么办 苹果手机充电器不支持此配件解决方法苹果手机充电器不支持此配件怎么办 苹果手机充电器不支持此配件解决方法

    当 iPhone 充电器提示“不支持此配件”时,可尝试以下方法:检查充电线和适配器是否是原装或经过 MFi 认证。清洁充电端口和充电线的连接器。重启 iPhone。更新 iOS。尝试不同的电源插座或 USB 端口。检查 Lightning 连接器是否有损坏。更换充电线或适配器。联系 Apple 支持…

    2026年9月24日 用户投稿
    100
  • 受益海外业务及前装业务大增,锐明技术H1净利润同比预增53.64%至77.9%

    受益海外业务及前装业务大增,锐明技术H1净利润同比预增53.64%至77.9%受益海外业务及前装业务大增,锐明技术H1净利润同比预增53.64%至77.9%受益海外业务及前装业务大增,锐明技术H1净利润同比预增53.64%至77.9%受益海外业务及前装业务大增,锐明技术H1净利润同比预增53.64%至77.9%

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 7月10日,锐明技术发布2025年上半年业绩预告。公告显示,公司上半年预计归属于上市公司股东的净利润为19,000万元至22,000万元,较去年同期增长53.64%至77.9%;预计扣除非经常性…

    2026年9月24日 用户投稿
    000
  • 疑似一加Ace 6配置曝光:骁龙8至尊版+7800mAh电池

    疑似一加Ace 6配置曝光:骁龙8至尊版+7800mAh电池疑似一加Ace 6配置曝光:骁龙8至尊版+7800mAh电池疑似一加Ace 6配置曝光:骁龙8至尊版+7800mAh电池疑似一加Ace 6配置曝光:骁龙8至尊版+7800mAh电池

    近日,一款新机的详细配置被数码博主曝光。该机型将搭载骁龙8至尊版移动平台,提供五种存储组合,包括12GB+256GB、12GB+512GB、16GB+256GB、16GB+512GB以及16GB+1TB版本。内置高达7800mAh的大容量电池,并支持120W超级快充技术。 屏幕方面,新机配备一块1.…

    2026年9月24日 用户投稿
    000
  • sublime的session文件是做什么用的_sublime会话文件作用与恢复机制

    sublime的session文件是做什么用的_sublime会话文件作用与恢复机制sublime的session文件是做什么用的_sublime会话文件作用与恢复机制sublime的session文件是做什么用的_sublime会话文件作用与恢复机制sublime的session文件是做什么用的_sublime会话文件作用与恢复机制

    Sublime Text的session文件记录了打开的文件、光标位置、代码折叠状态、窗口布局及未保存内容等信息,位于系统特定目录下的Local文件夹中,以JSON格式存储,通过自动保存机制在重启后恢复编辑状态。 Sublime Text 的 session 文件主要用于保存用户当前编辑环境的状态信…

    2026年9月24日 用户投稿
    000
  • swoole用来解决php什么问题

    swoole用来解决php什么问题swoole用来解决php什么问题swoole用来解决php什么问题swoole用来解决php什么问题

    swoole是一个用C写的php扩展,实现了网络层的很多功能        (推荐学习: swoole视频教程) 实际上作为一名PHP程序员,我很清楚PHP的确有很多局限性,比如Unix系统编程、网络通信编程、异步io,大部分PHPer不懂。PHP界也确实没有这样的东西。Swoole开源项目就是为了…

    2026年9月24日 用户投稿
    100
  • windows10的gpedit.msc组策略打不开_windows10组策略编辑器打不开修复方法

    windows10的gpedit.msc组策略打不开_windows10组策略编辑器打不开修复方法windows10的gpedit.msc组策略打不开_windows10组策略编辑器打不开修复方法windows10的gpedit.msc组策略打不开_windows10组策略编辑器打不开修复方法windows10的gpedit.msc组策略打不开_windows10组策略编辑器打不开修复方法

    首先检查系统文件完整性,运行sfc /scannow修复损坏文件;若为家庭版系统,使用DISM命令安装组策略组件;接着通过注册表编辑器修改MMC相关限制策略;最后尝试直接从System32目录运行gpedit.msc文件。 如果您尝试通过运行命令打开Windows 10的组策略编辑器(gpedit.…

    2026年9月24日 用户投稿
    000
  • 这套5000元的主机配置能战未来吗?

    5000元台式机可战未来3-4年,适合大学生主流游戏与学习。搭配R5 5600+RTX 4060级配置,1080P高画质流畅运行3A大作,2K需降特效但支持DLSS/FSR;6核12线程CPU加16GB内存满足办公、编程、视频剪辑需求;B550/B650主板和550W以上电源预留升级空间,支持后续提…

    2026年9月24日
    000
  • DeepSeek能不能帮我写代码 简单编程任务如何交给DeepSeek完成

    DeepSeek能不能帮我写代码 简单编程任务如何交给DeepSeek完成DeepSeek能不能帮我写代码 简单编程任务如何交给DeepSeek完成DeepSeek能不能帮我写代码 简单编程任务如何交给DeepSeek完成DeepSeek能不能帮我写代码 简单编程任务如何交给DeepSeek完成

    很多用户好奇,像DeepSeek这样的AI模型能否帮助完成编程任务,特别是那些相对简单的编程需求。答案是肯定的。DeepSeek具备理解自然语言描述并尝试生成相应代码的能力,这使得它成为完成一些简单编程任务的有力工具。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepS…

    2026年9月24日 用户投稿
    100
  • ubuntu如何mount网络驱动器

    在ubuntu中挂载网络驱动器有多种方法,以下是一些常见的方法: 方法一:使用mount命令 确定网络驱动器的地址:例如,如果是Samba共享,地址可能是smb://server/share。如果是NFS共享,地址可能是nfs://server/share。安装必要的软件包:对于Samba共享,安装…

    2026年9月24日
    000

发表回复

登录后才能评论
关注微信