Хобрук: Ваш путь к мастерству в программировании

Сокращение наборов данных временных рядов от дня к неделе

я получил ежедневные данные временных рядов из mysql, и я хочу превратить их в еженедельные данные временных рядов. Как я мог это сделать?

Например, вот набор данных продукта с ключами Timestamp & Price, содержащим 14 дней дат и соответствующих цен.

Product: {'Timestamp': [datetime.date(2019, 4, 15), datetime.date(2019, 4, 16), datetime.date(2019, 4, 17), datetime.date(2019, 4, 18), datetime.date(2019, 4, 19), datetime.date(2019, 4, 20), datetime.date(2019, 4, 21), datetime.date(2019, 4, 22), datetime.date(2019, 4, 23), datetime.date(2019, 4, 24), datetime.date(2019, 4, 25), datetime.date(2019, 4, 26), datetime.date(2019, 4, 27), datetime.date(2019, 4, 28)]
, 'Price': ['3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988']}

Теперь вместо того, чтобы просто иметь соответствующие даты и цены, я хочу, чтобы мои недельные средние данные начинались в субботу и заканчивались в пятницу (здесь я использую примеры пятницы, 19 апреля, и пятницы, 26 апреля, чтобы представить еженедельные данные). средние значения, используя данные за 6 дней до каждой из этих дат; обратите внимание, что эти даты не просто представляют цену за один день), поэтому результат должен быть таким:

Product: {'Timestamp': [ datetime.date(2019, 4, 19), datetime.date(2019, 4, 26)]
, 'Price': ['3988', '3988']}
18.06.2019

Ответы:


1

Вы можете легко найти среднее значение недели, начиная с пятницы, если вы преобразуете данные своего временного ряда в pd.to_datetime()

df = pd.DataFrame({'Timestamp': [datetime.date(2019, 4, 15), datetime.date(2019, 4, 16), datetime.date(2019, 4, 17), datetime.date(2019, 4, 18), datetime.date(2019, 4, 19), datetime.date(2019, 4, 20), datetime.date(2019, 4, 21), datetime.date(2019, 4, 22), datetime.date(2019, 4, 23), datetime.date(2019, 4, 24), datetime.date(2019, 4, 25), datetime.date(2019, 4, 26), datetime.date(2019, 4, 27), datetime.date(2019, 4, 28)], 'Price': ['3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988', '3988']})
df['Timestamp'] = pd.to_datetime(df['Timestamp'])
df['Price'] = df['Price'].astype('int')

затем используйте понимание списка, чтобы создать новую серию, а затем кумулятивно суммировать данные

df['Week'] = [1 if x == 4 else 0 for x in df['Timestamp'].dt.weekday]
df['Week'] = df['Week'].cumsum()

Наконец, сгруппируйте только что созданную серию, чтобы получить результат.

df[['Price', 'Week']].groupby('Week').mean()

Надеюсь это поможет :)

ОБНОВИТЬ

Вы можете просто выполнить агрегатную функцию для переменной Timestamp с минимальной и максимальной, и вы также получите даты.

df[['Timestamp', 'Week']].groupby(['Week']).agg({'Timestamp':[np.min,np.max]})
18.06.2019
  • Привет, твой ответ действительно полезен! это полностью решает мою проблему. Спасибо! хорошего дня! 19.06.2019
  • о, у меня все еще есть проблема, индекс, который я получил из этого результата, - это неделя, но я хочу, чтобы мой индекс был датой, которую я выбрал для окончания. поэтому индекс должен быть datetime.date(2019, 4, 19), datetime.date(2019, 4, 26). любая мысль? 19.06.2019
  • Привет, я добавил код. Дайте мне знать, если это решит вашу проблему. Добрый день 19.06.2019
  • Спасибо, что еще оставить несколько шагов необходимо решить. это дало мне некоторый удар, хотя. 20.06.2019

  • 2

    Следуя инструкциям @saahil, я почти могу получить то, что хочу. есть одна информация, которую мне нужно иметь в моем результате, - это временная метка, соответствующая неделе. Однако есть мое решение, вместо группировки по выбору, чтобы помочь мне в этом.

    df2 = pd.pivot_table(df,index=['Week'],values=['Price','Timestamp'],aggfunc={'Price':np.mean,'Timestamp': max})
    
    20.06.2019
    Новые материалы

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..