Как я могу эффективно получить среднее значение данных в указанном окне из большого набора данных? - PullRequest
2 голосов
/ 07 августа 2020

У меня есть набор данных, содержащий около 30 000 образцов. Вот как выглядит набор данных:

  X         Y           Z       Magnitude   CoordinateID

-17.34  29.519999   -20.520000  27.942548       0                         
-17.40  29.279999   -20.220000  27.751907       0

x1000 similar rows

-16.14  29.880000   -22.920000  29.078961       10  
-19.619 29.099998   -22.140000  30.550350       22                      

x1000 similar Rows and so on

Я хочу получить среднее значение первых 100 выборок (каждой строки в столбцах X, Y, Z и Magnitude), затем следующих 100 выборок и т. Д. И сохранить результаты в новый фрейм данных. Как это реализовать?

РЕДАКТИРОВАТЬ: Мне также нужно, чтобы CoordinateID был частью моего нового фрейма данных. Например, предположим, что первые 1000 строк имеют идентификатор координаты с 0, другие 1000 строк имеют 1 в качестве идентификатора координаты, так как я могу сохранить это в моем новом фрейме данных?

Ответы [ 3 ]

1 голос
/ 07 августа 2020

Это то, что тебе нужно? Требуется скользящее среднее для указанного столбца, где 100 относится к размеру окна.

df['X_rolling_avg'] = df.X.rolling(100).mean() 
df['Y_rolling_avg'] = df.Y.rolling(100).mean() 
df['Magn_rolling_avg'] = df.Magnitude.rolling(100).mean() 

0 голосов
/ 07 августа 2020

Если вам нужно среднее значение для каждых 100 строк (0-99, 100-199) и т. Д., Вы можете сделать это, используя groupby

grouper = df.groupby(['CoordinateID',df.reset_index().index // 100])
new_df = grouper.agg(X_mean = ('X', 'mean'), 
                     Y_mean = ('Y', 'mean'),
                     Z_mean = ('Z', 'mean')).reset_index(level=0)
0 голосов
/ 07 августа 2020
import numpy as np
import time
import random
import statistics as s

data = random.sample(range(1,60000),50000)

start_time = time.time()
nrml_avg = s.mean(data)
end_time = time.time()
print(f'Normal mean function takes {end_time - start_time} -> Ans : {nrml_avg}')

start_time = time.time()
numpy_avg = np.average(data)
end_time = time.time()
print(f'Normal mean function takes {end_time - start_time} -> Ans : {numpy_avg}')

Normal mean function takes 0.03384280204772949 -> Ans : 29984.97692
Nnumpy mean function takes 0.008012771606445312 -> Ans : 29984.97692

[50000 data analysis]
I hope you get the fastest algo to get avg.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...