在三列大熊猫上应用RMS公式

时间:2018-06-25 14:09:46

标签: python-3.x pandas time-series apply data-manipulation

我正在尝试对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

列“ 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']

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

2 个答案:

答案 0 :(得分:3)

使用:

accdf['ACC_RMS'] = np.sqrt(accdf.pop(1)**2 + accdf.pop(2)**2 + accdf.pop(3)**2)
print (accdf)
       0    ACC_RMS
0  1.963  72.034714
1  1.963  71.909666
2  1.963  68.709534
3  1.963  65.375837
4  1.963  63.150614

答案 1 :(得分:2)

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