如何将日期为列的时间序列宽表转换为指定布局的DataFrame?
时间序列DataFrame格式转换解决方案
问题说明
现有DataFrame以地区名称为行、日期为列,需要转换为日期为行、地区名称为列的格式。原代码混合了Python与R语法,需修正适配Python环境。
当前数据布局
| Name | 2008-01 | 2008-02 |
|---|---|---|
| California | x | x |
| New York | x | x |
预期数据布局
| date | California | New York |
|---|---|---|
| 2008-01 | x | x |
| 2008-02 | x | x |
修正后的Python代码
import pandas as pd # 读取数据 map_df = pd.read_csv('https://raw.githubusercontent.com/GeorgeRobbin/GeorgeRobbin.github.io/main/Delinnquency_MAP.csv') # 1. 将宽格式转为长格式(替换R语法为pandas原生方法) melted_df = pd.melt(map_df, id_vars=['Name'], var_name='date', value_name='value') # 2. 将长格式转为目标宽格式 target_df = melted_df.pivot(index='date', columns='Name', values='value').reset_index() # 清理列名,匹配预期格式 target_df.columns.name = None
代码解释
pd.melt():把原数据中所有日期列(如2008-01)拆解为date列,保留Name作为标识列,对应数值存入value列,得到长格式中间数据。pivot():以date作为行索引,Name作为列名,value作为单元格值,转换为目标宽格式。reset_index():将date从索引转为普通列;columns.name = None移除列索引的名称,让最终结果和预期布局完全一致。
内容的提问来源于stack exchange,提问作者user20901436
相关产品推荐
相关产品推荐

