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

如何在Pandas中透视DataFrame并生成新列存储状态值

表格透视转换解决方案

需求说明

需要将原始表格中的独立日期列(如1/1/2022)转换为Effective Date行值,对应状态值存入Status列,同时保留其余列的重复数据,实现宽表转长表的结构转换。

原始表格

IDFirst NameLast NameDate of Birth1/1/20222/1/20223/1/20224/1/2022Start DateEnd Date
MO12WandaSample1/1/2020GoodGoodGoodGood1/1/20221/31/2022

目标表格

IDEffective DateFirst NameLast NameDate of BirthStatusStart DateEnd Date
MO121/1/2022WandaSample1/1/2020Good1/1/20221/31/2022
MO122/1/2022WandaSample1/1/2020Good1/1/20221/31/2022
MO123/1/2022WandaSample1/1/2020Good1/1/20221/31/2022
MO124/1/2022WandaSample1/1/2020Good1/1/20221/31/2022

用户尝试的错误代码

import pandas as pd
import numpy as np

df = pd.read_csv(r'C:\Users\User\sample.csv')
df.pivot_table(columns=['Effective Date','First Name','Last Name','Date of Birth','Status','Start Date','End Date'],values=['1/1/2022','2/1/2022','3/1/2022','4/1/2022'], aggfunc=np.max)
df.head

正确实现方法

这里需要使用pd.melt()函数完成宽表转长表的操作(pivot_table适用于长表转宽表,不符合当前需求),具体代码如下:

import pandas as pd

# 读取原始数据
df = pd.read_csv(r'C:\Users\User\sample.csv')

# 定义不需要转换的固定列(标识列)
id_columns = ['ID', 'First Name', 'Last Name', 'Date of Birth', 'Start Date', 'End Date']

# 执行宽表转长表转换
result_df = df.melt(
    id_vars=id_columns,
    var_name='Effective Date',  # 将原日期列名存入该列
    value_name='Status'         # 将原日期列的状态值存入该列
)

# 查看转换结果
print(result_df)

代码说明

  • id_vars:指定转换过程中保持不变、需要重复显示的列
  • var_name:设置存储原日期列名的新列名称(即Effective Date)
  • value_name:设置存储原日期列状态值的新列名称(即Status)

执行上述代码后,即可得到与目标表格结构完全一致的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:48:14