Wie berechnet man mit Pandas die täglichen Durchschnittswerte von Mittag bis Mittag?


8

Ich bin ziemlich neu in Python und Pandas, also entschuldige ich mich für zukünftige Missverständnisse.

Ich habe einen Pandas DataFrame mit Stundenwerten, der ungefähr so ​​aussieht:

2014-04-01 09:00:00 52.9    41.1    36.3

2014-04-01 10:00:00 56.4    41.6    70.8

2014-04-01 11:00:00 53.3    41.2    49.6

2014-04-01 12:00:00 50.4    39.5    36.6

2014-04-01 13:00:00 51.1    39.2    33.3

2016-11-30 16:00:00 16.0    13.5    36.6

2016-11-30 17:00:00 19.6    17.4    44.3

Jetzt muss ich für jede Spalte ab dem 01.04.2014 von 12:00 bis zum 02.04.2014 11:00 24-Stunden-Durchschnittswerte berechnen. Ich möchte also tägliche Durchschnittswerte von 12 bis 12 Uhr.

Leider habe ich keine Ahnung, wie das geht. Ich habe einige Vorschläge zur Verwendung von groupby gelesen, weiß aber nicht wirklich, wie ...

Vielen Dank im Voraus! Jede Hilfe wird geschätzt !!

Antworten:


7

Das baseArgument.

Ein Tag ist 24 Stunden, also würde eine Basis von 12 die Gruppierung von Mittag bis Mittag beginnen. Mit Resample erhalten Sie alle Tage dazwischen, sodass Sie dies .dropna(how='all')tun können, wenn Sie nicht die vollständige Basis benötigen. (Ich gehe davon aus, dass Sie eine DatetimeIndexhaben. Wenn nicht, können Sie das onArgument von resample verwenden, um Ihre datetime-Spalte anzugeben.)

df.resample('24H', base=12).mean()
#df.groupby(pd.Grouper(level=0, base=12, freq='24H')).mean() # Equivalent 

                         1      2          3
0                                           
2014-03-31 12:00:00  54.20  41.30  52.233333
2014-04-01 12:00:00  50.75  39.35  34.950000
2014-04-02 12:00:00    NaN    NaN        NaN
2014-04-03 12:00:00    NaN    NaN        NaN
2014-04-04 12:00:00    NaN    NaN        NaN
...                    ...    ...        ...
2016-11-26 12:00:00    NaN    NaN        NaN
2016-11-27 12:00:00    NaN    NaN        NaN
2016-11-28 12:00:00    NaN    NaN        NaN
2016-11-29 12:00:00    NaN    NaN        NaN
2016-11-30 12:00:00  17.80  15.45  40.450000


Auf jeden Fall eines der wenig genutzten Argumente. Wahrscheinlich, weil es oft einfacher / offensichtlicher ist, die Manipulation selbst
durchzuführen

Ich danke dir sehr!! Funktioniert perfekt!
NeedHelp

3

Sie können Ihre Zeit und Ihre Gruppe subtrahieren:

df.groupby((df.index - pd.to_timedelta('12:00:00')).normalize()).mean()

0

Sie können die Stunden um 12 Stunden verschieben und auf Tagesebene neu abtasten.

from io import StringIO
import pandas as pd

data = """
2014-04-01 09:00:00,52.9,41.1,36.3
2014-04-01 10:00:00,56.4,41.6,70.8
2014-04-01 11:00:00,53.3,41.2,49.6
2014-04-01 12:00:00,50.4,39.5,36.6
2014-04-01 13:00:00,51.1,39.2,33.3
2016-11-30 16:00:00,16.0,13.5,36.6
2016-11-30 17:00:00,19.6,17.4,44.3
"""

df = pd.read_csv(StringIO(data), sep=',', header=None, index_col=0)

df.index = pd.to_datetime(df.index)
# shift by 12 hours
df.index = df.index - pd.Timedelta(hours=12)
# resample and drop na rows
df.resample('D').mean().dropna()
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.