Python 大熊猫在一周内每四分之一小时得到最小值、最大值和平均值

Python 大熊猫在一周内每四分之一小时得到最小值、最大值和平均值,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有一个熊猫数据框,它的值是全年每四分之一小时的值 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

我有一个熊猫数据框,它的值是全年每四分之一小时的值

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行的数据帧(Mon 00:00,Mon 00:15,Mon 00:30,…,Sun 23:30,Sun 23:45),最小值,最大值,平均值


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

使用
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.gropper(freq='15min')
代替
df.index.time
,但这似乎给这里带来了一些麻烦。

您可以通过
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.gropper(freq='15min')
代替
df.index.time
,但这似乎给这里带来了一些麻烦。

你好,马里奥,你能提供一个更好的例子或者一个更好的例子吗?从您发布的数据框来看,似乎每15分钟只有一个值。每15分钟只有一个值。最小值、最大值和平均值应在每周一、周二……进行计算。。。一年中的00:15、00:30、00:45等等。现在更清楚了。嗨,马里奥,你能提供一个更好的例子或者一个更好的例子吗?从您发布的数据框来看,似乎每15分钟只有一个值。每15分钟只有一个值。最小值、最大值和平均值应在每周一、周二……进行计算。。。一年中的00:15、00:30、00:45等等。现在更清楚了。