使用Python中的Pandas查找每日最大值的小时数

时间:2016-05-25 16:51:44

标签: python pandas

我试图在我的需求时间序列中找到每天最大需求的小时数。

我创建了一个看起来像..

的数据框
                       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
...

和一个分组系列,使用.max()

查找每天的最大值
grouped = df.groupby(pd.TimeGrouper('D'))
grouped['power'].max()

输出

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

但是我也需要最大值的小时。如下所示:

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

我尝试过使用idxmax(),但我一直收到一个ValueError

2 个答案:

答案 0 :(得分:6)

2018-09-19更新:

  

FutureWarning:pd.TimeGrouper已弃用,将被删除;   请使用pd.Grouper(freq = ...)

溶液:

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

旧回答:

试试这个:

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

数据:

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

答案 1 :(得分:0)

您还可以使用df.groupby(df.index.date)按索引日期分组,然后使用idxmax()在功效列中找到最大值的索引:

df.groupby(df.index.date)["power"].idxmax()

如果您也需要功率值,请使用.loc

df.loc[df.groupby(df.index.date)["power"].idxmax()]