2017-03-22 110 views
2

假设我有建立这样一个每周的时间序列:重采样大熊猫的时间序列来预定义电网

rng = pd.date_range('1/1/2011', periods=72, freq='D') 
ts = pd.Series(np.random.randn(len(rng)), index=rng) 
weekly = ts.resample('W').mean() 

,你有另一系列的每日间隔,你想也agregate每周但以这样的方式它与第一个相匹配。

rng2 = pd.date_range('17/1/2011', periods=72, freq='D') 
ts2 = pd.Series(np.random.randn(len(rng2)), index=rng2) 

注意,第二个系列并不在同一天开始,所以干脆重新采样ts2它将使两个每周系列不对齐。如果重新采样可以接收重新采样的检测时间索引,那将是非常好的,但AFAICT这是不可能的。

你会如何做到这一点?

+0

在你的榜样,你应该TS2的指标改为RNG2(不能编辑我自己,因为这将是少于6个字符...如果每周系列已创建 – FLab

回答

2

@FLab的回答是最好的海事组织,如果你想在这两个系列完全相同的指数你也可以做这样的事情:

import pandas as pd 
import numpy as np 

rng = pd.date_range('1/1/2011', periods=72, freq='D') 
ts = pd.Series(np.random.randn(len(rng)), index=rng) 
weekly = ts.resample('W').mean() 

rng2 = pd.date_range('17/1/2011', periods=72, freq='D') 
ts2 = pd.Series(np.random.randn(len(rng2)), index=rng2) 

ts2.reindex(ts.index).resample('W').mean() 

Out[14]: 
2011-01-02   NaN 
2011-01-09   NaN 
2011-01-16   NaN 
2011-01-23 -0.073253 
2011-01-30 -0.065030 
2011-02-06 -0.037297 
2011-02-13 0.101782 
2011-02-20 -0.386027 
2011-02-27 0.131906 
2011-03-06 0.107101 
2011-03-13 -0.030496 
Freq: W-SUN, dtype: float64 

,如果你无法访问之前的索引,只需使用@FLab方法,例如:

ts.resample('W-SUN').mean() 
ts2.resample('W-SUN').mean() 

您可以通过multipl ËARG这里:

Alias Description 
W-SUN weekly frequency (sundays). Same as ‘W’ 
W-MON weekly frequency (mondays) 
W-TUE weekly frequency (tuesdays) 
W-WED weekly frequency (wednesdays) 
W-THU weekly frequency (thursdays) 
W-FRI weekly frequency (fridays) 
W-SAT weekly frequency (saturdays) 
+0

史蒂文,假设你没有原始ts,只是原来的每周系列。 – fccoelho

+0

我刚测试过。如果你直接用weekly.index重新索引,它会有效。 – fccoelho

+0

小心:如果您使用weekly.index直接重新索引,代码仍会运行,但您会得到不同的(错误的)结果。 ts2.reindex(weekly.index)包含星期日发生的ts2的观测值。所以当你重新取样时,你并没有取得平均值,而只是保留星期天的值。 – FLab

2

当每周重新采样时,您还可以指定您的星期开始于哪一天:http://pandas.pydata.org/pandas-docs/stable/timeseries.html#anchored-offsets

因此,你可以这样做:

ts2_resamples = ts2.resample(weekly.index.freq).mean() 
+0

这种工作方式通过聚合。如果没有,则索引的freq属性不存在。 – fccoelho

+0

是的,你是对的,但我认为那是假设的例子。 如果在你的代码中你依赖于一系列的频率,我认为明确地强制执行它会更好。换句话说,即使你从星期天开始的每周系列剧的csv阅读,我想我会检查频率是否被大熊猫识别,否则我会明确地设定自己。 – FLab

+0

如果您需要设置特定频率,您可能也会对此问题感兴趣: http://stackoverflow.com/questions/27607974/python-pandas-dataframe-any-way-to-set-frequency-programmatically – FLab