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

如何用Python Pandas转置带日期范围值的DataFrame?

实现Python DataFrame的特定转置操作

原始DataFrame格式

year_month      Type    ID      Values1  Values2    Values3    ...
2022-01           A      1          1         0        0
2022-02           A      1          3         4        6
2022-03           A      1          5         9        10
2022-01           B      2          5         9        10
2022-02           B      2          4         2        1
....             ...    ...        ...

目标转置格式

ID  Type  Values   2022-01  2022-02  2022-03  ...
    1    A    Values1    1       3         5
    1    A    Values2    0       4         9
    1    A    Values3    0       6         10
    2    B    Values1    5       4         0 
    2    B    Values2    9       2         0
    2    B    Values3    10      1         0
   ...

解决方案

通过pandas的melt和pivot组合操作即可实现,步骤如下:

  • 将宽表转长表:用melt把Values1、Values2等数值列合并为Values列,对应数值转入新的value列,保留year_month、Type、ID作为标识列
import pandas as pd

# 假设原始数据框名为df
melted_df = df.melt(id_vars=['year_month', 'Type', 'ID'], 
                    var_name='Values', 
                    value_name='value')
  • 将长表转目标宽表:以ID、Type、Values为索引,year_month作为列名,value为填充值,最后重置索引得到目标结构
result_df = melted_df.pivot(index=['ID', 'Type', 'Values'], 
                            columns='year_month', 
                            values='value').reset_index()
  • 填充缺失值:对无对应数据的月份(比如示例中ID=2的2022-03数据),用fillna(0)补0
result_df = result_df.fillna(0)
  • 调整列顺序(可选):确保列顺序和目标格式一致
# 提取并排序月份列
month_cols = sorted([col for col in result_df.columns if col not in ['ID', 'Type', 'Values']])
result_df = result_df[['ID', 'Type', 'Values'] + month_cols]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:06:18