【问题标题】:Python - Downsample using resample not using average/meanPython - 使用重采样不使用平均值/平均值进行下采样
【发布时间】:2019-01-17 17:16:16
【问题描述】:

大家好

我一定遗漏了一些非常明显的东西,但是,
我有一个按小时计费的日期时间序列。我需要将其下采样到每日采样率,这很简单,使用 resample('D')。
但我不能使用平均值对其进行下采样。例如,我需要选择一天中的一个小时(例如 00:00h)并将其用作给定日期的值。 之前:

datetime              values
2018-05-08 00:00:00     0.1
2018-05-08 01:00:00     0.5
2018-05-08 02:00:00     0.7
2018-05-08 03:00:00     0.4
2018-05-08 04:00:00     0.7

期望的输出

datetime              values
2018-05-08             0.1

resample 中是否有任何方法,或者我应该使用其他方法吗?

最好的

编辑

首先我有很大的日期时间系列。

datetime              values
2018-05-08 00:00:00     0.1
2018-05-08 01:00:00     0.5
2018-05-08 02:00:00     0.7
2018-05-08 03:00:00     0.4
2018-05-08 04:00:00     0.7

然后我应用了维持每小时费率的运行平均值。

df['values'] = df['values'].rolling(168).mean(center=True)   

我使用 168,因为我需要前 3 天和后 3 天按小时收费。
从这里我需要下采样,但如果我使用标准的重采样方法,它会再次平均。

df = df.resample('D').mean()

【问题讨论】:

  • @pault 事情是我不能平均它。我将在以下评论中提供更多信息。
  • @joel edit 您的问题以提供更多信息。不要将其添加到 cmets 中。还提供您想要的输出。

标签: python python-3.x pandas downsampling


【解决方案1】:

你可以应用你想要的任何功能。其中一些已经为您实现(例如meansum,还有firstlast):

df.resample('D').first()
#             values
# datetime          
# 2018-05-08     0.1

但是你可以应用任何你想要的函数,它将被传递给整个组来操作,就像groupby

例如,这是凌晨 2 点之前的最后一次(假设数据帧已经按索引排序):

import datetime

def last_before_2_am(group):
    before_2_am = group[group.index.time < datetime.time(2, 0, 0)]
    return before_2_am.iloc[-1]

df.resample('D').apply(last_before_2_am)
#             values
# datetime          
# 2018-05-08     0.5

【讨论】:

    猜你喜欢
    • 2020-06-27
    • 2021-12-24
    • 2019-07-12
    • 1970-01-01
    • 2012-06-06
    • 2022-01-18
    • 2015-03-06
    • 2012-09-18
    相关资源
    最近更新 更多