Я относительно новичок в Pandas, но, поскольку я вижу, что он часто используется в онлайн-учебнике и немного более многословен, чем numpy массивы, я подумал, что попробую.
Проблема Я пытаюсь решить, возможно, довольно просто, но я еще не нашел решения онлайн.
Ключевое требование: У меня очень большое значение df, поэтому я должен избегать дублирования данных в максимально возможной степени.
Данные приведены ниже: каждая строка представляет собой шаг по времени, каждый столбец представляет собой значение сигнала в пространственном измерении x.
Я бы хотел добиться сглаживания данных в обоих направлениях. В идеале, с переменным размером окна. Мои фактические данные имеют некоторые значения nan
в.
Так что лучшим способом, который я нашел, было перебирать весь ряд данных по строкам и делать следующее:
time_smooth_data = df.iloc[row: row+time_smoothing,:].mean(axis = 0)
spatial_smooth_data = time_smooth_data .rolling(spatial_smoothing, min_periods = spatial_smoothing, center = True).median().values
Это фильтрация по существу сглаживает данные с использованием среднего значения во временных направлениях (строки) и медианного сглаживания в пространственном направлении X. Причина в том, что мои данные гораздо более ошибочны c, если случайно отклонить значения графика в направлении X, поэтому медиана позволяет мне удалить эти эффекты.
То, что я ищу, будет выглядеть примерно так:
smoothing_window = (3,5) # smooth over three rows (timestep) and five x units
smoothing_rules = (np.mean, np.median) #the smoothing type to apply in each direction
smoothed_df = smooth(df, smoothing_window, smoothing_rules) # a function taking the dataframe and the smoothing window and rules and returns the smoothed_df... or even better does it in place!
Я не могу понять, как эффективно определить функцию smooth
.
Любая помощь или понимание приветствуются! Спасибо за ваше время.