2016-05-25 3 views
4

Ich versuche, die Stunde der maximalen Nachfrage jeden Tag in meiner Nachfrage Zeitreihe zu finden.Finden Stunde der täglichen Max mit Pandas in Python

Ich habe einen Datenrahmen geschaffen, wie ..

     power 
2011-01-01 00:00:00 1015.70 
2011-01-01 01:00:00 1015.70 
2011-01-01 02:00:00 1010.30 
2011-01-01 03:00:00 1010.90 
2011-01-01 04:00:00 1021.10 
2011-01-01 05:00:00 1046.00 
2011-01-01 06:00:00 1054.60 
... 

und eine gruppierte Serie den maximalen Wert aus jedem Tag zu finden sucht mit .max()

grouped = df.groupby(pd.TimeGrouper('D')) 
grouped['power'].max() 

OUTPUT

2011-01-01 1367.30 
2011-01-02 1381.90 
2011-01-03 1289.00 
2011-01-04 1323.50 
2011-01-05 1372.70 
2011-01-06 1314.40 
2011-01-07 1310.60 
... 

Allerdings brauche ich auch die Stunde des Maximalwertes. So etwas wie:

2011-01-01 18 1367.30 
2011-01-02 5 1381.90 
2011-01-03 22 1289.00 
2011-01-04 10 1323.50 
... 

Ich habe versucht, idxmax mit(), aber ich bekomme immer ein Valueerror

+0

'df verwenden. groupby (pd.TimeGroup ('D')) ['power']. idxmax() 'funktioniert für mich, wenn ich die kleine Menge von Daten verwende, die du zur Verfügung gestellt hast. – piRSquared

+0

@piRSquared, wenn ich es versuche - ich bekomme 'KeyError: 'Spalte nicht gefunden: power'' – MaxU

+0

@MaxU welche Version von Pandas? – piRSquared

Antwort

3

try this:

In [376]: df.loc[df.groupby(pd.TimeGrouper('D')).idxmax().iloc[:, 0]] 
Out[376]: 
              power 
2011-01-01 06:00:00      1054.6 
2011-01-02 06:00:00      2054.6 

Daten:

In [377]: df 
Out[377]: 
              power 
2011-01-01 00:00:00      1015.7 
2011-01-01 01:00:00      1015.7 
2011-01-01 02:00:00      1010.3 
2011-01-01 03:00:00      1010.9 
2011-01-01 04:00:00      1021.1 
2011-01-01 05:00:00      1046.0 
2011-01-01 06:00:00      1054.6 
2011-01-02 00:00:00      2015.7 
2011-01-02 01:00:00      2015.7 
2011-01-02 02:00:00      2010.3 
2011-01-02 03:00:00      2010.9 
2011-01-02 04:00:00      2021.1 
2011-01-02 05:00:00      2046.0 
2011-01-02 06:00:00      2054.6 
+0

Das funktioniert super, danke! Es funktioniert gut für ein Jahr lang Daten, wenn ich versuche, zwei Jahre zu laufen, bekomme ich: 'raise IndexError (" einzelner positioneller Indexer ist out-of-bounds ") IndexError: einzelner positionaler Indexer ist out-of-bounds'. Ich vermute etwas stimmt nicht mit meinen Daten. – lewis2ba

+0

Haben Sie Tage in Ihren Daten? 'pd.TimeGroup ('D')' generiert Gruppen für jedes Datum zwischen dem Min- und Max-Datum, sodass Sie leere Gruppen für fehlende Tage erhalten, was zu dem angezeigten Fehler führt. – root

+0

Es scheint keine fehlenden Tage in den Daten zu geben. Ich kann jedes Jahr getrennt (2011 oder 2012) laufen und die Ergebnisse bekommen. Wenn ich sie zusammen laufen lasse (2011 und 2012) bekomme ich den Wertfehler. Gehen Sie sicher, dass die 2-Jahres-CSV-Datei korrekt formatiert ist – lewis2ba

Verwandte Themen