【问题标题】:Python Non-standard Datetime Grouping/SelectionPython非标准日期时间分组/选择
【发布时间】:2020-06-05 09:23:33
【问题描述】:

我有一个 Pandas 数据框,其中包含 5 分钟的数据。数据样本看起来像

timestamp,name,value
2020-04-30 00:00:00,a,21.1018
2020-04-30 00:05:00,a,-3.7804
2020-04-30 00:10:00,a,2.6110
2020-04-30 00:15:00,a,-20.0046
2020-04-30 00:20:00,a,-21.7144
2020-04-30 00:25:00,a,22.2500
2020-04-30 00:30:00,a,16.9082
2020-04-30 00:35:00,a,14.8040
2020-04-30 00:40:00,a,7.3906
2020-04-30 00:45:00,a,97.7612
2020-04-30 00:50:00,a,6.0274
2020-04-30 00:55:00,a,24.4248
2020-04-30 01:00:00,a,173.8800
2020-04-30 01:05:00,a,155.7417

我想要做的是从 00:05 到 01:00 获取数据并获取它的平均值,并对一天中的所有此类时间间隔执行相同操作,基本上是 yyyy-mm-dd hh: 05 至 yyyy-mm-dd (hh + 1):00。我不能假设数据帧的数据会在特定时间点开始或结束,但可以保证 5 分钟的间隔。如果有其他方法,则不必对 Pandas 执行此操作。

给定数据的预期输出为 26.71,因此选择 00:05 到 01:00 之间的时间间隔并取值的平均值。然后我会整天重复这个。

【问题讨论】:

  • 请发布预期输出
  • 你能澄清一下到底是什么问题吗?
  • 这是模棱两可的。如果有时间戳... hh:01的数据怎么办?实际上,我最好的猜测是你想要... hh:00 < t <= ... (hh+1):00... hh:05 <= t < ... (hh+1):05
  • @no1xsyzy 我可以假设 5 分钟的间隔不是数据中的开始时间或结束时间,但更笼统地说... hh:05 <= t < ... (hh+1):05 也是正确的。
  • @AMC 主要问题是选择所描述的时间范围的好方法,对于一整天的数据,假设数据可以有任意的开始和结束 5 分钟间隔。

标签: python pandas datetime


【解决方案1】:

你可以做一个偏移:

# convert to datetime if not already is
df['timestamp'] = pd.to_datetime(df['timestamp'])

offset = pd.to_timedelta('5M')
df.groupby(df['timestamp'].sub(offset).dt.floor('H')).mean()

输出:

                         value
timestamp                     
2020-04-29 23:00:00   21.10180
2020-04-30 00:00:00   26.71315
2020-04-30 01:00:00  155.74170

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 2011-01-16
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    相关资源
    最近更新 更多