【问题标题】:Folding pandas time series into single day将 pandas 时间序列折叠成单日
【发布时间】:2018-11-29 18:25:05
【问题描述】:

我有一个跨越多天的时间序列事件 - 我最感兴趣的是计数/10 分钟间隔。所以目前,重采样后是这样的

2018-02-27 16:20:00    5
2018-02-27 16:30:00    4
2018-02-27 16:40:00    0
2018-02-27 16:50:00    0
2018-02-27 17:00:00    0
...
2018-06-19 05:30:00    0
2018-06-19 05:40:00    0
2018-06-19 05:50:00    1

如何将这些数据“折叠”起来,以得到只有“一天”的数据,并将计数加起来?所以它看起来像这样

00:00:00    0
00:10:00    0
...
11:00:00   47
11:10:00   36
11:20:00   12
...
23:40:00    1
23:50:00    0

【问题讨论】:

  • 那么,您想忽略天数并简单地获取 10 分钟间隔内的计数吗?
  • @HarvIpan 我这么认为?合并每 10 分钟间隔的计数。

标签: python python-3.x pandas numpy time-series


【解决方案1】:

如果您的系列索引是 DatetimeIndex,您可以使用属性 time -- 如果它是 DataFrame 并且您的日期时间是一列,您可以使用 .dt.time。例如:

In [19]: times = pd.date_range("2018-02-27 16:20:00", "2018-06-19 05:50:00", freq="10 min")
    ...: ser = pd.Series(np.random.randint(0, 6, len(times)), index=times)
    ...: 
    ...: 

In [20]: ser.head()
Out[20]: 
2018-02-27 16:20:00    0
2018-02-27 16:30:00    1
2018-02-27 16:40:00    4
2018-02-27 16:50:00    5
2018-02-27 17:00:00    0
Freq: 10T, dtype: int32

In [21]: out = ser.groupby(ser.index.time).sum()

In [22]: out.head()
Out[22]: 
00:00:00    285
00:10:00    293
00:20:00    258
00:30:00    263
00:40:00    307
dtype: int32

In [23]: out.tail()
Out[23]: 
23:10:00    280
23:20:00    291
23:30:00    236
23:40:00    303
23:50:00    299
dtype: int32

【讨论】:

  • 这似乎给了我正确的时间序列。不过,我需要进一步研究它,因为它给了我每个时间段的恒定计数。编辑:开个玩笑,我使用的是 .count() 而不是 .sum()。
【解决方案2】:

如果我理解正确,您希望在第一个时间列中每 10 分钟间隔的值总和。您也许可以尝试以下方法:

df.groupby('columns')['value'].agg(['count'])

【讨论】:

    猜你喜欢
    • 2020-02-22
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 2020-03-20
    • 2021-11-20
    • 1970-01-01
    相关资源
    最近更新 更多