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

如何使用Pandas将同时间传感器的行内多值数据转换为列格式并展开?

解决方案

可以通过pandas的数据重塑操作实现需求,核心是先将宽表转为长表,再重新透视成目标格式:

步骤说明

  1. 拆分多值列:将每个sensor对应的value1至value6列拆分为多行,每行对应一个value项
  2. 构建分组索引:提取value列的序号(1-6),作为同一time下的分组依据
  3. 透视转换:将sensor列转为列名(ACCX/ACCY/ACCZ),按time和序号分组聚合
  4. 整理结果:重置索引,得到目标格式

代码实现

import pandas as pd

# 示例数据(可替换为实际数据读取代码,如pd.read_csv)
data = [
    [22.10, 'ACCX', 6, 0.23, 0.44, 0.53, 0.23, 0.44, 0.53],
    [22.10, 'ACCY', 6, 0.87, 0.32, 0.12, 0.87, 0.32, 0.12],
    [22.10, 'ACCZ', 6, 0.44, 0.33, 0.45, 0.63, 0.44, 0.93],
    [22.12, 'ACCX', 6, 0.63, 0.44, 0.93, 0.87, 0.32, 0.12],
    [22.12, 'ACCY', 6, 0.87, 0.32, 0.12, 0.44, 0.33, 0.45],
    [22.12, 'ACCZ', 6, 0.44, 0.33, 0.45, 0.34, 0.22, 0.78],
    [22.15, 'ACCX', 6, 0.23, 0.44, 0.53, 0.64, 0.53, 0.25],
    [22.15, 'ACCY', 6, 0.87, 0.32, 0.12, 0.87, 0.32, 0.12],
    [22.15, 'ACCZ', 6, 0.44, 0.33, 0.45, 0.44, 0.33, 0.45],
    [22.18, 'ACCX', 6, 0.63, 0.44, 0.93, 0.87, 0.32, 0.12],
    [22.18, 'ACCY', 6, 0.87, 0.32, 0.12, 0.44, 0.33, 0.45],
    [22.18, 'ACCZ', 6, 0.44, 0.33, 0.45, 0.87, 0.32, 0.12],
]
columns = ['time', 'sensor', 'sample', 'value1', 'value2', 'value3', 'value4', 'value5', 'value6']
df = pd.DataFrame(data, columns=columns)

# 将value列转为长表
melted = df.melt(id_vars=['time', 'sensor'], value_vars=[f'value{i}' for i in range(1,7)], 
                 var_name='value_idx', value_name='value')

# 提取value的序号作为分组键
melted['idx'] = melted['value_idx'].str.extract('(\d+)').astype(int)

# 透视转换,将sensor转为列
pivoted = melted.pivot_table(index=['time', 'idx'], columns='sensor', values='value', aggfunc='first').reset_index()

# 整理最终列顺序
result = pivoted[['time', 'ACCX', 'ACCY', 'ACCZ']]

# 输出或保存结果
print(result)

结果验证

运行代码后,输出结果将与目标格式完全匹配:每个time对应6行,每行包含该时间点下ACCX/ACCY/ACCZ对应位置的value值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 01:55:35