使用重采样来对齐熊猫中的多个时间序列
Posted
技术标签:
【中文标题】使用重采样来对齐熊猫中的多个时间序列【英文标题】:Using resample to align multiple timeseries in pandas 【发布时间】:2012-10-22 12:50:23 【问题描述】:这是设置代码:
import pandas
from datetime import datetime
a_values = [1728, 1635, 1733]
a_index = [datetime(2011, 10, 31), datetime(2012, 1, 31), datetime(2012, 4, 30)]
a = pandas.Series(data=a_values, index=a_index)
aa_values = [6419, 5989, 6006]
aa_index = [datetime(2011, 9, 30), datetime(2011, 12, 31), datetime(2012, 3, 31)]
aa = pandas.Series(data=aa_values, index=aa_index)
apol_values = [1100, 1179, 969]
apol_index = [datetime(2011, 8, 31), datetime(2011, 11, 30), datetime(2012, 2, 29)]
apol = pandas.Series(data=apol_values, index=apol_index)
这是数据在表格中的样子(未显示 APOL 的第三个值):
目标是将数据与日历季度标记对齐,以便可以比较 3 个数据集。看看下面的日期,2012 年 3 月、2011 年 12 月和 2011 年 9 月似乎是合理的对齐标记。
这是 fill_method='ffill' 的输出:
In [6]: a.resample('Q', fill_method='ffill')
Out[6]:
2011-12-31 1728
2012-03-31 1635
2012-06-30 1733
Freq: Q-DEC
In [7]: aa.resample('Q', fill_method='ffill')
Out[7]:
2011-09-30 6419
2011-12-31 5989
2012-03-31 6006
Freq: Q-DEC
In [8]: apol.resample('Q', fill_method='ffill')
Out[8]:
2011-09-30 1100
2011-12-31 1179
2012-03-31 969
Freq: Q-DEC
看起来像这样:
注意每个系列中最新的数字是如何排列的。
这是 fill_method='bfill' 的输出:
In [9]: a.resample('Q', fill_method='bfill')
Out[9]:
2011-12-31 1635
2012-03-31 1733
2012-06-30 NaN
Freq: Q-DEC
In [10]: aa.resample('Q', fill_method='bfill')
Out[10]:
2011-09-30 6419
2011-12-31 5989
2012-03-31 6006
Freq: Q-DEC
In [11]: apol.resample('Q', fill_method='bfill')
Out[11]:
2011-09-30 1179
2011-12-31 969
2012-03-31 NaN
Freq: Q-DEC
看起来像这样:
同样,该系列中的最新数字不对齐。
这是resample()
在这种情况下的预期输出吗?
我可以做些什么来获得上面最近 3 个数字对齐并且其他所有内容都遵循的结果?
编辑:这是所需输出的样子:
【问题讨论】:
您能否向我们展示您想要的最终输出,以确保我们了解您想要实现的目标。 刚刚编辑了问题并添加了所需的最终输出。目标(如果不是不言而喻的话)是以编程方式获得它,因此以某种非自动检测的方式为每个系列调整不同的重采样参数是没有帮助的 @root,我想要的输出有意义吗?这个问题有什么问题吗? (我看到有人反对)。非常感谢。 @ dshap - 添加了一个答案,这应该非常接近。至少你应该知道怎么做 投票重新开放。这不是太本地化。 【参考方案1】:df1 = DataFrame('a':a)
df2 = DataFrame('aa':aa)
df3 = DataFrame('apol':apol)
df=df1.append([df2,df3]).sort_index()
print df.resample('Q-APR',loffset='-1m').T
输出:
2011-09-30 2011-12-31 2012-03-31
a 1728 1635 1733
aa 6419 5989 6006
apol 1100 1179 969
【讨论】:
以上是关于使用重采样来对齐熊猫中的多个时间序列的主要内容,如果未能解决你的问题,请参考以下文章