【问题标题】:Pandas get min, max, mean value for every quarter of an hour for a whole week熊猫在一周内每一刻钟获得最小值,最大值,平均值
【发布时间】:2018-06-19 21:43:54
【问题描述】:

我有一个 Pandas 数据框,它的值是全年每一刻钟的值。

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 行的 DataFrame(周一 00:00、周一 00:15、周一 00:30、...、周日 23:30、周日 23:45),最小值、最大值、意思。

我尝试使用df.groupby()resample(),但均未成功。

【问题讨论】:

  • 嗨马里奥,你能提供一个更好的例子还是mcve?从您发布的数据框看来,每 15 分钟只有一个值。
  • 每 15 分钟只有一个值。全年的每个星期一、星期二、... 00:15、00:30、00:45 等应计算最小值、最大值和平均值。
  • 现在更清楚了。

标签: python pandas pandas-groupby


【解决方案1】:

您可以使用 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'])

这是一个sn-p:

>>> 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,但这似乎给这里带来了一些麻烦。

【讨论】:

    猜你喜欢
    • 2017-08-27
    • 2015-09-11
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    相关资源
    最近更新 更多