如何用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
相关产品推荐
相关产品推荐

