我试图在我的需求时间序列中找到每天最大需求的小时数。
我创建了一个看起来像..
的数据框 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
答案 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()]