Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Finding hour of daily max using Pandas in Python

Tags:

python

pandas

I am trying to find the hour of max demand every day in my demand time series.

I have created a dataframe that looks like..

                       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
...

and a grouped series to find the max value from each day using .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
...

However I need the hour of the max value also. So something like:

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

I have tried using idxmax() but I keep getting a ValueError

like image 590
lewis2ba Avatar asked May 25 '16 16:05

lewis2ba


1 Answers

UPDATE from 2018-09-19:

FutureWarning: pd.TimeGrouper is deprecated and will be removed; Please use pd.Grouper(freq=...)

solution:

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

Old answer:

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

data:

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
like image 198
MaxU - stop WAR against UA Avatar answered Oct 05 '22 15:10

MaxU - stop WAR against UA