如何转换Pandas DataFrame布局:宽表转长表并调整日期格式
Pandas宽表转长表实现方案
你可以通过Pandas的melt()方法配合日期格式调整,快速实现需求中的格式转换,以下是完整操作步骤:
1. 构造原始DataFrame(方便复现测试)
import pandas as pd # 构建你的原始数据结构 data = { 'FB': [10, 4, 6, 0, 0], 'AMZN': [4, 0, 0, 0, 0], 'AAPL': [1, 0, 0, 0, 0], 'NFLX': [7, 0, 0, 0, 0], 'GOOG': [0, 23, 34, 0, 0] } # 生成日期索引 index_dates = pd.date_range(start='2004-01-01', periods=5, freq='MS') df = pd.DataFrame(data, index=index_dates) df.index.name = 'date'
2. 执行格式转换
# 第一步:将索引列date转为普通数据列 df_reset = df.reset_index() # 第二步:用melt方法转长表,指定标识列、新列名 df_long = df_reset.melt( id_vars='date', # 保留的标识列 var_name='Company', # 原列名对应的新列名 value_name='Score' # 原单元格值对应的新列名 ) # 第三步:调整日期格式为DD.MM.YYYY df_long['date'] = df_long['date'].dt.strftime('%d.%m.%Y') # 可选:按Company排序,匹配目标输出的顺序 df_long = df_long.sort_values('Company').reset_index(drop=True)
最终输出结果
Company date Score 0 AAPL 01.01.2004 1 1 AAPL 01.02.2004 0 2 AAPL 01.03.2004 0 3 AAPL 01.04.2004 0 4 AAPL 01.05.2004 0 5 AMZN 01.01.2004 4 6 AMZN 01.02.2004 0 7 AMZN 01.03.2004 0 8 AMZN 01.04.2004 0 9 AMZN 01.05.2004 0 10 FB 01.01.2004 10 11 FB 01.02.2004 4 12 FB 01.03.2004 6 13 FB 01.04.2004 0 14 FB 01.05.2004 0 15 GOOG 01.01.2004 0 16 GOOG 01.02.2004 23 17 GOOG 01.03.2004 34 18 GOOG 01.04.2004 0 19 GOOG 01.05.2004 0 20 NFLX 01.01.2004 7 21 NFLX 01.02.2004 0 22 NFLX 01.03.2004 0 23 NFLX 01.04.2004 0 24 NFLX 01.05.2004 0
关键说明
melt()是Pandas专为宽表转长表设计的工具,参数可以精准控制转换后的列名和结构dt.strftime('%d.%m.%Y')用于将默认日期格式转换为你需要的日.月.年格式- 排序步骤仅为匹配目标输出的顺序,若无需特定顺序可省略
内容的提问来源于stack exchange,提问作者Alberto Alvarez
相关产品推荐
相关产品推荐

