Как использовать количество повторных выборок для отображения исходных данных

#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` is yyyy-mm-dd .

2. Вот почему я сказал, что вам нужно изменить код в соответствии с вашим форматом данных. Но, nvm, я видел, что у вас уже есть решение.