使用另一个时间序列的索引重新采样一个时间序列

Posted

技术标签:

【中文标题】使用另一个时间序列的索引重新采样一个时间序列【英文标题】:Resample a time series with the index of another time series 【发布时间】:2013-06-02 19:53:24 【问题描述】:

我有 2 个具有相同列但不同日期时间索引的数据框。我想对其中一个进行重新采样以使用另一个的索引,并在另一个索引中没有数据的任何日期从一个转发填充数据。

import pandas as pd
import numpy as np
from datetime import datetime as dt

a_values = np.random.randn(4, 4)
a_index = [dt(2012, 3, 16), dt(2012, 3, 19), dt(2012, 3, 20), dt(2012, 3, 21)]
a = pd.DataFrame(data=a_values, index=a_index)

b_values = np.trunc(np.random.randn(3, 4) * 1000)
b_index = [dt(2012, 3, 16), dt(2012, 3, 19), dt(2012, 3, 21)]
b = pd.DataFrame(data=b_values, index=b_index)

c_insert = a.ix['2012-03-20']
c = b.append(c_insert).sort()
c.ix['2012-03-20'] = c.ix['2012-03-19']

'a' 表示我想将其索引用作重采样参考的数据框。 'b' 代表我想要重新采样和转发填充数据的数据框。 'c' 代表我想要的结果。

请注意,“b”缺少“a”中存在的“2012-03-20”索引。 “c”使用索引“2012-03-19”的“b”列中的数据填充索引“2012-03-20”的列

pandas 是否具有执行此操作的功能。

提前致谢。

皮尔

【问题讨论】:

【参考方案1】:

要按参考索引重新采样,请使用reindex

In [11]: b.reindex(a.index, method='ffill')
Out[11]: 
               0     1     2     3
2012-03-16  -926  -625   736   457
2012-03-19 -1024   742   732 -1020
2012-03-20 -1024   742   732 -1020
2012-03-21  1090 -1163  1652   -94

【讨论】:

您也可以使用:b.reindex_like(a, method='ffill'). 虽然reindex_like 如果数据框有不同的列会有不同的效果!如果只想更改索引,请使用reindex

以上是关于使用另一个时间序列的索引重新采样一个时间序列的主要内容,如果未能解决你的问题,请参考以下文章

pandas DataFrame 从不规则时间序列索引中重新采样

熊猫数据框每天重新采样,没有日期时间索引

熊猫数据框每天重新采样,没有日期时间索引

上采样日期时间 - ValueError:无法使用方法或限制重新索引非唯一索引

如何重新采样 DataFrame 以使其与另一个 DataFrame 正确对齐?

Pandas 从重采样中检索添加行的索引