求助:如何用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
相关产品推荐
相关产品推荐

