You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何用Pandas将指定DataFrame从长格式转宽格式

解决方案

问题分析

你的需求是将每行格式为键: 值的单列数据,按每3行一组转换为宽表,每组对应一行,键作为列名,对应值填充到单元格中。原代码的核心问题是未正确拆分出独立的键(列名)和值字段,导致pivot时用完整字符串作为列名,无法得到预期结果。

修正后的代码

import pandas as pd

# 读取原数据
df = pd.read_excel('PathV1.xlsx')

# 1. 拆分source列,得到键(key)和值(value)两列
# 注意:如果原数据中冒号后无空格,把分隔符改成':'即可
df[['key', 'value']] = df['source'].str.split(': ', expand=True)

# 2. 创建分组索引:每3行分为一组
df['group'] = df.index // 3

# 3. 转换为宽表,重置索引并去掉group列
df2 = df.pivot(index='group', columns='key', values='value').reset_index(drop=True)

# 可选:重置列名(去掉columns的名称层级)
df2.columns.name = None

代码说明

  • 拆分列:使用str.split(': ', expand=True)将source列拆分为key(如姓名、性别、年龄)和value(如张三、男、25)两列,确保后续能正确识别列名。
  • 分组索引:df.index // 3会生成连续的分组编号(0,0,0,1,1,1...),实现每3行归为一组。
  • pivot转换:通过pivot将分组后的键值对转换为宽表,最后用reset_index(drop=True)去掉分组索引,得到目标格式。

内容的提问来源于stack exchange,提问作者Peter Serey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 10:13:10