Aktywne Wpisy
WielkiNos +96
Wiedzieliście, że są ludzie wyrzucający książki na śmietnik? Bo ja nie wiedziałam. Dla mnie to niewyobrażalne.
#ksiazki #gdansk #bekazpodludzi
#ksiazki #gdansk #bekazpodludzi
Tortcebulowy +220
Skopiuj link
Skopiuj linkWykop.pl
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
Mniejwięcej tak, tylko index na date zrób.
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.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 kazdego
@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 as td
def is_sunday(date):
if date.isoweekday() == 7:
return date+td(days=1)
else:
return date
i dalej już w dataframe:
df['nowadata'] = df.loc[:,'nazwakolumnyzdata'].map(is_sunday)
tutaj inny - calkiem elegancki - sposób: https://pastebin.com/yVVTcuUM
from io import StringIO
import numpy as np
import pandas as pd
data = StringIO("""date_and_time,value
2020-01-05 00:00:00,-13
2020-01-02 01:00:00,22
2020-01-02 02:00:00,65
2020-01-02 03:00:00,-17
2020-01-02 04:00:00,-4
2020-01-02 05:00:00,5
""")
df = pd.read_csv(data,parse_dates=['date_and_time']) # type: ignore
`df['dt_sundays_as_mondays'] = np.select(`
`[df['date_and_time'].dt.dayofweek == 6],`
`[df['date_and_time'].dt.date+pd.Timedelta(days=1)],`
`default=df['date_and_time'].dt.date`
`)`
aggregated_df = df.groupby('dt_sundays_as_mondays').sum('value')
print(aggregated_df)