Повторная выборка данных в кадре данных со взвешенными средними - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть фрейм данных с данными, основанными на времени, и мне нужно выполнить его повторную выборку по 12-часовым и дневным периодам. Пока что я использую следующий код:

if self.resample_by == 'day':
    self.model_df = self.model_df.resample('D', on='index').mean()
    self.model_df.dropna(axis=0, inplace=True)
elif self.resample_by == 'shift':
    delta = dt.timedelta(hours=12)
    self.model_df = self.model_df.resample(delta, on='24h_day_start').mean()
    self.model_df.dropna(axis=0, inplace=True)
else:
    pass

Прямо сейчас, как вы можете видеть, я использую mean() для пересэмплированных данных в качестве временного промежутка, но в действительности разные строки имеют разные веса, поэтому мне нужно вместо этого выполнить вычисление средневзвешенного значения.

Как я понимаю, проблема в том, что мне нужно написать функцию для вычисления средневзвешенных значений, а затем использовать apply(func) вместо mean(). Правильно?

Однако я не понимаю, как структурировать мою функцию, потому что я запутался в том, что на самом деле возвращает DataFrame.resample. В документации говорится, что функция возвращает объект ресамплера . Кто-нибудь знает, что это за объект и как я могу использовать вывод в функции взвешенного среднего?

Или, может быть, есть другой подход, который я мог бы использовать?

1 Ответ

1 голос
/ 18 апреля 2020

Перебрать свойство groups.

rs = df.resample(...)

for group_name, group_labels in rs.groups.items():
    vals = rs.get_group(group_name)
    # apply weighted average function to vals df

Полная документация по объекту Resampler на https://pandas.pydata.org/pandas-docs/stable/reference/resampling.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...