【问题标题】:Sampling with the most recent value使用最新值进行采样
【发布时间】:2015-02-06 19:43:56
【问题描述】:

考虑以下系列:

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 可以用于此目的吗?如果有,怎么做?

【问题讨论】:

  • 你能在问题中添加想要的结果吗

标签: python numpy pandas


【解决方案1】:

如果您首先定义一组预定义日期(在下面的示例中为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

在这种情况下(您给出的示例日期),这给出了所有相同的值,因为对于所有日期,原始系列中最近的观察结果都是相同的。

如果你不想给出一个特定的集合,而只是从原始系列的开始到结束的所有日期,你可以使用resample do达到相同:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-03
    • 2013-01-04
    相关资源
    最近更新 更多