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

如何基于某列值透视表格?Pandas DataFrame转换求助

问题描述

现有如下Pandas DataFrame:

import pandas as pd
dataframe = pd.DataFrame({'col1': ['Name', 'Location', 'Phone','Name', 'Location'], 
'Values': ['Mark', 'New York', '656','John', 'Boston']})

其显示形式为:

col1     Values
0     Name       Mark
1  Location   New York
2     Phone        656
3     Name       John
4  Location     Boston

可见目标列名存储在col1列中,且部分数据缺少Phone值,希望将其转换为如下格式:

Name  Location  Phone
0   Mark  New York    656
1   John    Boston    NaN

已尝试Excel转置、pivot及pivot_table方法:

pivoted = pd.pivot_table(data = dataframe, values='Values', columns='col1')

但结果不符合预期,寻求解决方法。

注:每组数据以Name开头,下一个Name前结束。

解决方法

核心思路是先给每组数据分配唯一分组ID,再基于分组ID完成透视转换:

  1. 生成分组标识符
    标记所有col1为Name的行,通过累加计数生成分组ID,再将ID填充到同组的其他行:

    # 标记Name行并生成分组ID
    dataframe['group_id'] = (dataframe['col1'] == 'Name').cumsum()
    
  2. 透视转换为目标格式
    以group_id为索引、col1为列、Values为值执行透视,最后重置索引并清理列名层级:

    result = dataframe.pivot(index='group_id', columns='col1', values='Values').reset_index(drop=True)
    # 移除不必要的列名层级
    result.columns.name = None
    

执行后得到的结果即为预期格式:

Name  Location  Phone
0   Mark  New York    656
1   John    Boston    NaN

补充说明

  • cumsum()会在每次遇到Name行时累加计数,自动将连续行划分为独立分组;
  • 同组内的所有行通过填充获得相同分组ID,确保透视时同组字段能归到同一行;
  • 即使新增其他字段(如Email),只要分组仍以Name开头,该方法依然有效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:45:39