You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas将多设备时间序列数据按列转成行?

用Pandas实现多设备读数数据的宽表转长表(扁平化)

问题描述

我从系统获取了一段时间范围内的多设备读数数据,日期时间为单独一列,每个设备的读数各占一列,示例DataFrame如下:

Date/Time        DEVICE_1    DEVICE_2
 01/01  01:00:00  10.141667   8.807851

希望将其转换为扁平化格式:每个设备列转为一行,包含相同的时间戳、设备名称和对应数值,示例输出如下:

Date/Time        Name     Value    
01/01  01:00:00  DEVICE_1 10.141667
01/01  01:00:00  DEVICE_2 8.807851

若有10个设备,每个时间戳对应的行需拆分为10行,每行对应一个设备,要求用Pandas实现且避免循环操作。


解决方案

完全可以用Pandas内置的melt()函数实现,这是专门用于宽表转长表的高效工具,无需手动循环,处理大量设备数据时性能优势明显。

代码示例

假设你的原始DataFrame名为df,执行以下代码即可完成转换:

import pandas as pd

# 构造示例数据(实际使用时替换为你的原始数据)
data = {
    'Date/Time': ['01/01  01:00:00'],
    'DEVICE_1': [10.141667],
    'DEVICE_2': [8.807851]
}
df = pd.DataFrame(data)

# 执行宽转长操作
flattened_df = df.melt(
    id_vars=['Date/Time'],  # 保留作为标识的时间戳列
    var_name='Name',        # 转换后设备名称列的表头
    value_name='Value'      # 转换后读数数值列的表头
)

print(flattened_df)

输出结果

Date/Time      Name      Value
0  01/01  01:00:00  DEVICE_1  10.141667
1  01/01  01:00:00  DEVICE_2   8.807851

参数说明

  • id_vars:指定不需要被转换的列(这里是时间戳列),每行的该列值会自动重复对应到每个设备的行中。
  • var_name:设置原设备列名转换后的新列名,对应示例中的Name。
  • value_name:设置原设备读数转换后的新列名,对应示例中的Value。

无论你有10个还是更多设备,这个方法都能一次性完成转换,完全不需要循环操作。


内容的提问来源于stack exchange,提问作者berimbolo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 08:10:53