如何通过操作现有DataFrame创建含YYYY-MM列的目标DataFrame?
解决MultiIndex列DataFrame转YYYY-MM日期格式长表问题
方法步骤:
- 格式化列名:将原始的年份-月份多层列索引(MultiIndex)转换为
YYYY-MM格式的字符串,注意给月份补零保证两位格式。 - 宽表转长表:使用Pandas的
melt()函数将宽格式DataFrame转换为长格式,直接得到日期列和数值列。
示例代码:
假设你的原始DataFrame名为df,列是包含年份(第一层)和月份(第二层)的MultiIndex:
import pandas as pd # 1. 把MultiIndex列转为YYYY-MM格式的字符串 df.columns = [f"{year}-{month:02d}" for year, month in df.columns] # 2. 转换为目标长表结构 result_df = df.melt(var_name="YYYY-MM", value_name="数值")
补充说明:
f"{year}-{month:02d}":通过格式化字符串拼接年份和月份,02d确保1-9月自动补零(比如1月转为01),保证日期格式统一。melt():自动将所有列名映射为YYYY-MM列的取值,对应单元格的数值全部归入数值列,完全匹配需求结构。
如果你的原始列名不是MultiIndex(比如列名是2020_1这类字符串),可以先拆分再格式化:
# 处理"年份_月份"格式的列名 df.columns = [ f"{y}-{m:02d}" for col in df.columns for y, m in [col.split("_")] ] result_df = df.melt(var_name="YYYY-MM", value_name="数值")
内容的提问来源于stack exchange,提问作者ricenix
相关产品推荐
相关产品推荐

