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

如何将DataFrame的月份数值列转换为日期列并展开数据?

实现步骤

用pandas可以轻松完成这个格式转换,具体操作如下:

1. 构造初始DataFrame

先把你的数据转换成pandas DataFrame:

import pandas as pd

df = pd.DataFrame({
    "初始值": [100, 50],
    "发布日期": ["1/1/2024", "1/1/2025"],
    "第1月数值": [99, 40],
    "第2月数值": [94, 30],
    "第3月数值": [90, 10]
})

2. 转换日期格式并转成长表结构

先把发布日期转为datetime类型,方便后续计算;再用melt函数把多列的月份数值转成单行列,同时提取每个月份的序号:

# 转换发布日期为datetime类型
df["发布日期"] = pd.to_datetime(df["发布日期"], format="%m/%d/%Y")

# 转长表,保留初始值和发布日期作为标识
melted = df.melt(id_vars=["初始值", "发布日期"], var_name="月份标识", value_name="数值")

# 从月份标识中提取数字(比如"第1月数值"提取1)
melted["月份数"] = melted["月份标识"].str.extract(r"第(\d+)月").astype(int)

3. 生成目标日期并转回宽表

根据发布日期和月份数计算对应的具体日期,再用pivot_table转回宽表格式,缺失的位置填充为0:

# 计算目标日期:发布日期加上(月份数-1)个月,再转成MM/DD/YYYY格式
melted["目标日期"] = (melted["发布日期"] + pd.DateOffset(months=melted["月份数"]-1)).dt.strftime("%m/%d/%Y")

# 转宽表,填充缺失值为0
result = melted.pivot_table(
    index=["初始值", "发布日期"],
    columns="目标日期",
    values="数值",
    fill_value=0
).reset_index()

# 把发布日期转回原字符串格式(可选)
result["发布日期"] = result["发布日期"].dt.strftime("%m/%d/%Y")

4. 按日期排序列(可选)

如果需要列按日期顺序排列,可对日期列进行排序:

# 提取所有日期列并按时间排序
sorted_dates = sorted(result.columns[2:], key=lambda x: pd.to_datetime(x, format="%m/%d/%Y"))
# 重新排列DataFrame的列
result = result[["初始值", "发布日期"] + sorted_dates]

运行完以上代码,得到的result就是你需要的结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 10:03:30