考虑以下系列:
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-01
到2014-12-07
的每一天)对此系列进行抽样。在每个这样的示例中,我希望从原始系列中获得最最新值。
我一直在关注resample
(另请参阅this和this主题),因为它看起来像是工作的正确工具。但是,我还没有很好地掌握这个功能。
resample
可以用于此吗?如果是这样,怎么样?
答案 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