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等等。现在更清楚了。