Wpis z mikrobloga

mam dane godzinowe i chcę je zsumować do pełnych dni.

mam coś takiego:

1 2020-01-02 00:00:00 -13
2 2020-01-02 01:00:00 22
3 2020-01-02 02:00:00 65
4 2020-01-02 03:00:00 -17
5 2020-01-02 04:00:00 -4
6 2020-01-02 05:00:00 5

i chcę uzyskać nowy dataframe, który będzie wyglądał tak:

1 2020-01-02 00:00:00 -58 <--suma wartości godzinowych z tego dnia
danych jest dużo, na kilkanaście lat. jakieś pomysły jak mogę to zrobić?

#python #sql #pandas
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@maciekXDDD: Możesz sobie to ogarnąć od razu SQL z bazy albo zaciągnąć pełne dane do pandas i zrobić df.groupby([pd.Grouper(key='nazwakolumnyzdata', freq='D')]) albo zrobić df.resample('D') jeśli będziesz miał kolumnę z datą jako index dla swojej dataframe.
  • Odpowiedz
@maciekXDDD: nie wiem jak wyglądają twoje dane ale na logikę potrzebujesz niedzielę oznaczyć jako poniedziałek i na tym zagregować/zgrupować. W zależności jakiego dialektu sql używasz mozesz uzyc funkcji np. Datename w sql serverze które ci zwróci dzień tygodnia.

Druga opcja to zrobić temp tabele/cte z zagregowanymi danymi dla niedziel.
I nastepnie polaczyc ja z twoja tabela glowna w ten sposob ze laczysz po tabelaglowna.dzien - 1 = tabelazniedziela.dzien (czyli dla
  • Odpowiedz
natomiast potrzebuje wartości z niedzieli dodać do wartości poniedziałkowej.


@maciekXDDD: Mając już dane w pandas napisałbym sobie funkcję sprawdzającą czy dany dzień jest niedzielą i zamienił ten dzień na poniedziałek, co z resztą powyżej już wskazano.

from datetime import datetime as dt
from datetime import timedelta
  • Odpowiedz