按Ayx标识过滤Signal值并存储为矩阵的技术问询
解决方案:按机器编号与时间戳提取Signal值并构建矩阵
没问题,这完全可以实现!我会基于Python的pandas库(处理表格数据的首选工具)给你一步步拆解实现思路和代码:
1. 先理清数据结构对应关系
从你给出的数据示例来看,表头里的NameX(Ayx)(比如Name1(A01))应该是对应后续SignalX列的机器归属——比如Name1(A01)对应Signal1,Name2(A02)对应Signal2,以此类推。我们需要先把机器编号(Ayx)和对应的Signal列关联起来。
2. 具体实现步骤
步骤1:读取并预处理数据
假设你的数据是CSV格式(如果是其他格式,只需调整读取方式),先加载数据并处理表头:
import pandas as pd import re # 读取数据,header=0表示第一行是表头 df = pd.read_csv('your_dataset.csv', header=0) # 提取表头中包含机器编号的列(比如Name1(A01)) machine_header_cols = [col for col in df.columns if '(A' in col] # 从这些列名中提取机器编号(比如从(A01)中取出01) machine_ids = [re.search(r'\(A(\d+)\)', col).group(1) for col in machine_header_cols] # 匹配对应的Signal列(Name1对应Signal1,Name2对应Signal2...) signal_cols = [f'Signal{idx+1}' for idx in range(len(machine_header_cols))]
步骤2:构建机器与Signal列的映射
把机器编号和对应的Signal列绑定,方便后续提取:
machine_signal_map = dict(zip(machine_ids, signal_cols))
步骤3:生成目标矩阵
以**时间戳(Timestamp)**为列、机器编号为行,提取对应Signal值构建矩阵:
# 将时间戳设为数据的索引,方便后续按时间取值 df = df.set_index('Timestamp') # 初始化结果矩阵 result_matrix = pd.DataFrame() # 遍历每个机器,提取对应Signal列的值加入矩阵 for machine_id, signal_col in machine_signal_map.items(): result_matrix[machine_id] = df[signal_col] # 转置矩阵,让行是机器编号,列是时间戳(符合你需求的Signal1[i,j],i=机器,j=时间) result_matrix = result_matrix.T
3. 如何使用结果矩阵
现在result_matrix就是你需要的结构:
- 行索引是机器编号(比如
01对应A01) - 列索引是时间戳(比如
2017-11-01 00:00) - 取值示例:
result_matrix.loc['01', '2017-11-01 00:00']就是机器A01在该时间点的Signal1值,完美对应你要的Signal1[i,j]形式。
注意事项
- 如果表头的
NameX和SignalX不是严格一一对应(比如Name3对应Signal5),你需要手动调整signal_cols的生成逻辑,确保机器编号和正确的Signal列关联。 - 如果数据中有缺失值,可以用
df.fillna()方法填充,避免矩阵出现空值影响后续使用。
内容的提问来源于stack exchange,提问作者tfkLSTM
相关产品推荐
相关产品推荐

