如何将列格式时间序列数据转换为常规DataFrame?
解决方案:用pandas的
melt函数实现宽表转长表 你不需要遍历单元格,pandas内置的melt函数就是专门处理这种宽格式转长格式的场景,代码简洁且效率高。
具体代码实现
import pandas as pd # 原始数据 df = pd.DataFrame({'id' : [1,2,3,4,5,6], 'category' : [1,3,1,4,3,2], 'day1' : [10,20,30,40,50,60], 'day2' : [1,2,3,4,5,7], 'day3' : [0,1,2,3,7,9] }) # 宽转长转换 result_df = df.melt(id_vars=['id', 'category'], # 保留的标识列 value_vars=['day1', 'day2', 'day3'], # 需要转换的列 value_name='day') # 转换后的数值列名称 # 去掉自动生成的variable列(不需要的话执行此步) result_df = result_df.drop(columns=['variable']) print(result_df)
转换后结果
运行代码后得到的结果和你需求完全匹配:
id category day 0 1 1 10 1 2 3 20 2 3 1 30 3 4 4 40 4 5 3 50 5 6 2 60 6 1 1 1 7 2 3 2 8 3 1 3 9 4 4 4 10 5 3 5 11 6 2 7 12 1 1 0 13 2 3 1 14 3 1 2 15 4 4 3 16 5 3 7 17 6 2 9
参数说明
id_vars:指定转换时保持不变的标识列,每个长表行会重复这些列的对应值value_vars:指定要被“拆解”成单行的目标列,这里就是所有以day开头的列value_name:设置转换后数值列的名称,对应你需要的day列
内容的提问来源于stack exchange,提问作者Roman Kazmin
相关产品推荐
相关产品推荐

