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

如何在Pandas DataFrame中转置指定列生成宽表

Pandas DataFrame行列转换(将Reason转为列)

原始DataFrame

RepNameHoursReason
John4Research
John15Training
Matt6Project Labor
Matt10Training

目标DataFrame

RepNameResearchTrainingProject Labor
John4150
Matt0106

解决方案

你需要的是窄表转宽表的操作,转置和melt是反向操作,所以不适用。下面两种方法可以快速解决问题:

方法1:用pivot_table(新手首选,一步到位)

这个方法会自动处理缺失值,直接得到目标格式:

import pandas as pd

# 构造原始数据(如果已有DataFrame可跳过此步)
df = pd.DataFrame({
    'RepName': ['John', 'John', 'Matt', 'Matt'],
    'Hours': [4, 15, 6, 10],
    'Reason': ['Research', 'Training', 'Project Labor', 'Training']
})

# 核心转换代码
result = df.pivot_table(
    index='RepName',  # 以RepName作为行标识
    columns='Reason', # 将Reason的每个唯一值转为列
    values='Hours',   # 用Hours的值填充对应单元格
    fill_value=0,     # 无对应数据的位置填0
    aggfunc='sum'     # 因每个RepName+Reason仅一条数据,sum/first效果一致
).reset_index()

# 移除列索引的名称,让表格更整洁
result.columns.name = None

print(result)

方法2:用pivot+fillna

如果想用基础的pivot方法,需要手动填充缺失值:

result = df.pivot(index='RepName', columns='Reason', values='Hours').fillna(0).reset_index()
result.columns.name = None

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:35:19