【问题标题】:Convert interval datetime values to any-frequency time series将间隔日期时间值转换为任意频率的时间序列
【发布时间】:2012-05-18 22:29:23
【问题描述】:

我有以下数据结构:

2011-01-01 00:00, 2011-01-20 00:00, 200   # days-range
2011-01-20 00:00, 2011-03-08 00:00, 1288  # days-range
2011-04-11 00:00, 2012-01-08 00:00, 5987  # days-range

2012-02-01 00:00, 2012-02-01 01:00, 7     # hourly-range
2012-02-01 02:00, 2012-02-01 02:30, 3     # hourly-range

这是包含开始日期结束日期(日期之间记录的一些指标)的间隔。

为了进一步的数据分析,我需要生成具有所需频率的时间序列: 每月/每天/每小时/每半小时时间序列。例如每小时数据:

2011-01-01 00:00, 2 
2011-01-01 01:00, 6
2011-01-01 02:00, 5
...

有没有python库可以帮助实现这种数据转换?

【问题讨论】:

  • 是的,pandas。你已经标记了它。但是你对第二列中的值做了什么?
  • @eumiro 是的,pandas 非常适合进一步分析,但在此之前,我需要从区间数据生成频率时间序列。示例:我从 1 月 1 日到 1 月 10 日跟踪了 200 公里。我需要每天建立值:200/10 = 每天 20 公里。当然,这是一个简单的案例。

标签: python time-series pandas data-analysis


【解决方案1】:
import pandas as pd

def stretch(start_date, end_date, value, freq):
    freq_dict = {'d': pd.datetools.day,
                 'h': pd.datetools.Hour(1)}
    dr = pd.DateRange(start_date, end_date, offset=freq_dict[freq])
    return pd.TimeSeries(value / dr.size, index=dr)


print stretch('2011-01-01 00:00', '2011-01-20 00:00', 200, 'd')

打印

2011-01-01    10
2011-01-02    10
2011-01-03    10
2011-01-04    10
2011-01-05    10
2011-01-06    10
2011-01-07    10
2011-01-08    10
2011-01-09    10
2011-01-10    10
2011-01-11    10
2011-01-12    10
2011-01-13    10
2011-01-14    10
2011-01-15    10
2011-01-16    10
2011-01-17    10
2011-01-18    10
2011-01-19    10
2011-01-20    10

【讨论】:

  • 谢谢@eumiro,非常有帮助!也许 pandas 可以解决另一种情况:我在 1 月 1 日至 10 日追踪了 200 公里,1 月 11 日至 2 月 20 日追踪了 600 公里,我需要一月和二月的每月频率?
  • 创建单独的每日时间序列,combinegroupby 将它们转换为月频率。
  • pandas 的重采样功能将在即将发布的 0.8.0 版本中得到极大改进,敬请关注。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-05
相关资源
最近更新 更多