如何用Pandas将宽格式时间序列DataFrame转为长格式?
将宽格式DataFrame转换为长格式的解决方案
用pandas的melt函数就能实现你要的效果,之前没得到精确输出大概率是没处理好参数或日期格式,直接看步骤:
步骤说明
- 用
melt把宽表转成基础长格式,指定Hour作为保留的标识列,其他日期列转成Date列,对应数值转成Values列 - 把原日期列名(比如
Wed Aug 10 2022)转换成你要的8/10/2022格式 - 可选排序,让结果和你给出的示例顺序一致
完整代码
import pandas as pd # 假设df是你的宽格式DataFrame long_df = df.melt( id_vars='Hour', # 保留不转换的列 var_name='Date', # 原日期列名转为新列的名称 value_name='Values' # 原数值列转为新列的名称 ) # 转换日期格式为mm/dd/yyyy long_df['Date'] = pd.to_datetime(long_df['Date']).dt.strftime('%m/%d/%Y') # 按日期和小时排序,和示例输出顺序匹配 long_df = long_df.sort_values(by=['Date', 'Hour']).reset_index(drop=True)
转换后结果示例
| Date | Hour | Values |
|---|---|---|
| 08/10/2022 | 1 | 52602 |
| 08/10/2022 | 2 | 49970 |
| 08/10/2022 | 3 | 48188 |
| ... | ... | ... |
| 08/11/2022 | 24 | 56233 |
注:
wide_to_long更适合列名有统一前缀后缀的场景(比如date_20220810),你的原列名格式不匹配,所以用melt更直接。
内容的提问来源于stack exchange,提问作者franklin
相关产品推荐
相关产品推荐

