熊猫每整整一个季度每分钟可获得最小值,最大值,平均值

时间:2018-06-19 12:57:59

标签: python pandas pandas-groupby

我有一个Pandas DataFrame,它的值是整个一年中每25分钟一次。

Datum
2017-01-01 00:15:00    223.1500
2017-01-01 00:30:00    224.8000
2017-01-01 00:45:00    229.3500
2017-01-01 01:00:00    226.7500
2017-01-01 01:15:00    221.9500
2017-01-01 01:30:00    225.7500
2017-01-01 01:45:00    230.7000

现在,我要绘制所有周平均值的每季度的最小值,平均值和最大值。

因此,最后我应该有一个包含672行(周一00:00,周一00:15,周一00:30,...,周日23:30,周日23:45)的DataFrame,并带有最小值,最大值,卑鄙的。

我尝试了df.groupby(),也尝试了resample(),但没有成功。

1 个答案:

答案 0 :(得分:3)

您可以使用groupby()agg()来实现:

一些示例数据:

import pandas as pd
import numpy as np

np.random.seed(444)

idx = pd.date_range('2017', end='2018', freq='15min')[:-1]
df = pd.DataFrame(np.random.randint(2000, 3000, size=idx.size) / 10,
                  index=idx, columns=['data'])

以及您要查找的操作:

to_grp = [df.index.weekday_name, df.index.time]
grp = df.groupby(to_grp, squeeze=True)['data'].agg(['min', 'mean', 'max'])

这是一个片段:

>>> grp.head()

                   min        mean    max
Friday 00:00:00  200.5  255.253846  299.7
       00:15:00  200.2  250.359615  299.9
       00:30:00  204.0  248.376923  299.4
       00:45:00  203.9  258.228846  299.9
       01:00:00  200.0  252.519231  298.6

>>> grp.shape
(672, 3)

我原以为您可以使用pd.Grouper(freq='15min')代替df.index.time,但这似乎在给您带来麻烦。