#python #python-3.x
#python #python-3.x
Вопрос:
Допустим, у меня есть набор данных в ежедневном масштабе, но не во все дни есть достоверные данные. Другими словами, в данных отсутствует несколько дней. Я хочу вычислить среднее значение летнего сезона из набора данных и хочу удалить месяц, в котором достоверных данных менее 20 дней.
Как мне этого добиться (в pythonic-стиле)?
Скажем, мой фрейм данных (df) выглядит так:
DATE VAR
1900-01-01 123
1900-01-02 456
1900-01-10 789
...
Я знаю, как вычислить количество:
df_count = df.resample('MS').count()
Я также знаю, как вычислить среднее значение летнего сезона:
df_summer = df.resample('Q-NOV').mean()
Комментарии:
1. обновление — я нашел решение, сопоставив результат повторной выборки с новым столбцом
N_VAR
вdf
:df['N_VAR'] = df.index.map(lambda x: df_count.loc[x.strftime('%Y-%m-01'),'VAR'] )
Ответ №1:
Вы можете на основе df_count
отфильтровать месяц, в котором достоверных данных менее 20 дней. После этого вычислите значение летнего сезона, используя вашу формулу.
df_count = df.resample('MS').count()
relevant_month = df_count[df_count > 10].index
df_summer = df[df.index.isin(relevant_month)].resample('Q-NOV').mean()
Я полагаю, вы храните месяц index
в. Если месяц или время хранятся в a different column
, измените df.index.isin(relevant_month)
на df.columnName.isin(relevant_month)
.
Я также не знаю формат вашего столбца time ( date
или datetime
), поэтому вам может потребоваться изменить код, чтобы соответствующим образом изменить эту часть df.index.isin(relevant_month)
. Это всего лишь общая идея.
Комментарии:
1. Это не сработает.
relevant_month
находится в форматеyyyy-mm-01'. But the original data is daily:
df.index` isyyyy-mm-dd
.2. Вот почему я сказал, что вам нужно изменить код в соответствии с вашим форматом данных. Но, nvm, я видел, что у вас уже есть решение.