按行迭代计算每100元素均值:DataFrame秒级数据转换需求
高效计算传感器数据的秒级均值
你完全不需要嵌套循环——Pandas和Numpy的向量化操作能更高效地完成这个任务,而且代码更简洁。以下是具体实现方案:
1. 读取原始数据(如果还未加载)
import pandas as pd import numpy as np # 加载txt数据到DataFrame df = pd.read_csv('https://raw.githubusercontent.com/Arancium98/ucihydraulic/main/Data/PS1.txt', sep='\s+', header=None)
2. 核心:向量化生成秒级均值
利用Numpy的reshape将整份数据直接重塑为三维结构(2205行 × 60秒 × 100个样本/秒),然后直接沿样本维度求均值:
# 重塑数据结构:(周期数, 秒数, 每秒样本数) reshaped_data = df.values.reshape(2205, 60, 100) # 对每秒的100个样本求均值,生成新的DataFrame Seconds = pd.DataFrame(reshaped_data.mean(axis=2))
3. 备选:用apply实现(可读性优先)
如果你更倾向于逐行处理的逻辑,也可以用apply结合分组求均值,虽然速度比向量化稍慢,但代码逻辑直观:
# 对每行按每100个元素分组,计算每组均值 Seconds = df.apply(lambda row: row.groupby(np.arange(len(row)) // 100).mean(), axis=1)
为什么不用嵌套循环?
嵌套循环是Python级别的逐元素操作,对于2205行×6000列的数据,运行效率会比向量化操作低几个数量级——Numpy的向量化操作是基于C实现的,能大幅提升处理速度。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

