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

如何使用pandas将DataFrame行数据转换为列数据

pandas实现Rank/Percentage拆分为独立列的方案

核心用pivot透视方法即可完成行列转换,以下是可直接复用的代码:


1. 匹配原始数据结构

先构造和示例一致的测试数据,你可以对照自己的实际DataFrame调整列名:

import pandas as pd

# 原始数据结构:指标名(Rank/Percentage)存在同一列,和分组字段逐行对应
raw_df = pd.DataFrame({
    'Category': ['X', 'X', 'Y', 'Y', 'Z', 'Z'],
    'MetricType': ['Rank', 'Percentage', 'Rank', 'Percentage', 'Rank', 'Percentage'],
    'MetricValue': [1, '92%', 2, '85%', 3, '79%']
})

2. 核心转换代码

# 透视转换:以业务分组列为索引,指标类型拆为独立列,取对应指标值填充
target_df = raw_df.pivot(
    index='Category', 
    columns='MetricType', 
    values='MetricValue'
).reset_index()

# 调整列顺序和目标格式对齐
target_df = target_df[['Category', 'Rank', 'Percentage']]

3. 特殊场景适配

  • 无单独指标列、按行块存储的场景:如果原始数据没有单独的MetricType列,前半段全是Rank数据、后半段全是Percentage数据,可以直接按行切片合并:
group_count = len(raw_df) // 2
rank_block = raw_df.iloc[:group_count].reset_index(drop=True)
pct_block = raw_df.iloc[group_count:].reset_index(drop=True)

target_df = pd.DataFrame({
    'Category': rank_block['Category'],
    'Rank': rank_block['MetricValue'],
    'Percentage': pct_block['MetricValue']
})
  • 存在重复数据的场景:如果转换时报「存在重复索引/列组合」的错误,把pivot换成pivot_table即可,指定聚合规则取对应值:
target_df = raw_df.pivot_table(
    index='Category',
    columns='MetricType',
    values='MetricValue',
    aggfunc='first'  # 重复值取第一条,可根据需求替换为sum/mean等
).reset_index()
  • 数值计算场景:如果后续需要对Percentage做数值计算,可以加一步类型转换:
target_df['Percentage'] = target_df['Percentage'].str.strip('%').astype('float') / 100

转换效果

原始长表结构:

CategoryMetricTypeMetricValue
XRank1
XPercentage92%
YRank2
YPercentage85%
ZRank3
ZPercentage79%

转换后目标宽表结构:

CategoryRankPercentage
X192%
Y285%
Z379%

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:03:25