在三列 pandas 上应用 RMS 公式

lam*_*738 3 time-series data-manipulation apply python-3.x pandas

我正在尝试对 3 维加速度计数据应用 RMS 函数。另外,我在开头有一个时间戳列,我以天数为单位保存。所以数据框如下:

       0        1       2      3
0   1.963   -12.0   -71.0   -2.0
1   1.963   -11.0   -71.0   -3.0
2   1.963   -14.0   -67.0   -6.0
3   1.963   -16.0   -63.0   -7.0
4   1.963   -18.0   -60.0   -8.0
Run Code Online (Sandbox Code Playgroud)

“0”列是天数,其他列都是加速度计的 3 轴数据。现在我正在使用这种方法来计算新列的 RMS 值并删除现有的 3 轴数据:

def rms_detrend(x):
    return np.sqrt(np.mean(x[1]**2 + x[2]**2 + x[3]**2))

accdf =pd.read_csv(ACC_files[1],header=None)
accdf['ACC_RMS'] = accdf.apply(rms_detrend,axis=1)
accdf = accdf.drop([1,2,3],axis=1)
accdf.columns = accdf['Days','ACC_RMS']
Run Code Online (Sandbox Code Playgroud)

然而,我有 70 个这样的加速度计数据文件,每个文件大约有 4000 多行。那么有没有更好更快的(Pythonic)方法来做到这一点?谢谢。上面的代码我只针对一个文件完成,而且速度非常慢。

WeN*_*Ben 5

一个方法来自pandas

(df.iloc[:,1:]**2).sum(1).pow(1/2)
Out[26]: 
0    72.034714
1    71.909666
2    68.709534
3    65.375837
4    63.150614
dtype: float64
Run Code Online (Sandbox Code Playgroud)