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

如何用Python Pandas实现表格转换:表头转内容、值转表头

Pandas表格转换:将任务转为列、人名转为内容的实现

原表格结构

先看你创建的原表格:

import pandas as pd

data = [['4/04/2023','Floors','Tables','Roof','Paint',''],['4/05/2023','','Floors','Tables','Roof','Paint'],['4/06/2023','Paint','','Floors','Tables','Roof'],['4/07/2023','Roof','Paint','','Floors','Tables']]
df = pd.DataFrame(data, columns=['Date', 'Jim','Bob','Ed','James','Joe'])

原表格以Date为日期列,人名(Jim、Bob等)为列头,单元格值为对应的任务(Floors、Tables等),空字符串表示无任务。

转换步骤

你推测的melt+pivot思路是对的,只需调整参数并处理空值,具体步骤如下:

  1. 用melt将宽表转成长表
    把人名列转为数据行的Person字段,任务值转为Task字段,同时过滤掉空任务的行:
# 转长表并过滤空值
melted_df = df.melt(
    id_vars='Date',  # 保留作为标识的Date列
    var_name='Person',  # 原列名(人名)存为Person字段
    value_name='Task'   # 原单元格值(任务)存为Task字段
).query("Task != ''")  # 剔除空任务的行
  1. 用pivot将长表转回宽表
    以Date为行标识,Task为新的列头,Person为对应单元格的值:
# 转宽表并重置索引
result_df = melted_df.pivot(
    index='Date',    # 行索引用Date
    columns='Task',  # 新列头用Task
    values='Person'  # 单元格填充对应的人名
).reset_index()  # 将Date从索引转回普通列

最终结果

执行后result_df即为目标样式:

  • 列头变为任务名(Floors、Tables、Roof、Paint)
  • 每行对应一个日期,单元格内容是该任务的负责人

打印result_df会得到:

Task        Date Floors  Tables   Roof   Paint
0       4/04/2023    Jim     Bob     Ed   James
1       4/05/2023    Bob     Ed   James     Joe
2       4/06/2023     Ed   James     Joe     Jim
3       4/07/2023  James     Joe     Jim     Bob

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:42:10