采样最近的价值

时间:2014-12-09 01:38:13

标签: python numpy pandas

考虑以下系列:

created_at
2014-01-27 21:50:05.040961    80000.00
2014-03-12 18:46:45.517968    79900.00
2014-09-05 20:54:17.991260    63605.31
2014-11-04 01:16:08.286631    64405.31
2014-11-04 01:17:26.398272    63605.31
2014-11-04 01:24:38.225306    64405.31
2014-11-13 19:32:14.273478    65205.31
Name: my_series, dtype: float64

我需要在一组特定的预定日期(例如2014-12-012014-12-07的每一天)对此系列进行抽样。在每个这样的示例中,我希望从原始系列中获得最新值。

我一直在关注resample(另请参阅thisthis主题),因为它看起来像是工作的正确工具。但是,我还没有很好地掌握这个功能。 resample可以用于此吗?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:4)

如果您首先定义一组预定义的天数(我的示例中为days),您可以reindex使用它并指定填充方法(' ffill'将传播最后一次有效的观察,所以这意味着最近的时间序列):

In [19]: s
Out[19]: 
time
2014-01-27 21:50:05.040961    80000.00
2014-03-12 18:46:45.517968    79900.00
2014-09-05 20:54:17.991260    63605.31
2014-11-04 01:16:08.286631    64405.31
2014-11-04 01:17:26.398272    63605.31
2014-11-04 01:24:38.225306    64405.31
2014-11-13 19:32:14.273478    65205.31
Name: my_series, dtype: float64

In [20]: days = pd.date_range('2014-12-01', '2014-12-07')

In [21]: s.reindex(days, method='ffill')
Out[21]: 
2014-12-01    65205.31
2014-12-02    65205.31
2014-12-03    65205.31
2014-12-04    65205.31
2014-12-05    65205.31
2014-12-06    65205.31
2014-12-07    65205.31
Freq: D, Name: my_series, dtype: float64

在这种情况下(您给出的示例日期),这给了alle相同的值,就像所有日期中原始系列中最近的观察结果相同。

如果您不想提供特定的设置,但只是从原始系列的开头到结尾的所有日期,您可以使用resample达到相同的目标:

In [23]: s.resample('D', how='last', fill_method='ffill')
Out[23]: 
time
2014-01-27    80000
2014-01-28    80000
2014-01-29    80000
2014-01-30    80000
...
2014-11-10    64405.31
2014-11-11    64405.31
2014-11-12    64405.31
2014-11-13    65205.31
Freq: D, Name: my_series, Length: 291