Применение формулы RMS к трем столбцам панд - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь применить функцию RMS для данных акселерометра, который находится в 3-х измерениях.Кроме того, в начале у меня есть столбец отметки времени, который я сохранил в счетчиках дней.Таким образом, кадр данных выглядит следующим образом:

       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-осевые данные акселерометра.Прямо сейчас я использую этот подход, чтобы вычислить среднеквадратичное значение в новый столбец и удалить существующие 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+ строк,Так есть ли лучший и более быстрый (питонический) способ сделать это?Благодарю.Код выше я сделал только для одного файла и он очень медленный.

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Метод из 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
0 голосов
/ 25 июня 2018

Использование:

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
...