这是滚动功能的其中一种广告模式,但并未按照您希望的方式进行操作。
滚动功能的设计与任何数据进行工作,而不仅仅是时间序列:在熊猫的最新版本,因为它是有利于rolling
被弃用所以为了说明,我将使用rolling
你应该使用rolling_mean
时得到一个警告。所以它'回顾'x个单位。回头参数设置为window
。它根据数据帧的排序顺序进行回顾。所以,即使你正确地排序你的数据,rolling
不知道你的意思是你给它一个5窗口的时间......它只能看到“回看5个单元格”
所以如果你想回头看看5针对缺少值的数据,您需要用这些值填充这些值。您可以使用NaN
或者您可以使用Pandas提供的众多插值方法之一。我要说明的NaN
方法:
因为你没有提供一些易于使用的合成数据,我设置一些了:
np.random.seed(1)
ts_data = pd.DataFrame(np.random.randn(6210),
index = pd.date_range('2000-01-01', '2016-12-31', freq='D'),
columns=['data']) # index of every day for 7 years
ts_sample = ts_data.sample(n=10).sort_index() ## sample then sort
print ts_sample
返回一个很好的例子分类与DF 10个值和日期指数:
data
2001-07-21 0.107343
2003-07-12 0.658537
2004-08-21 -0.463338
2006-07-13 -0.866955
2011-12-14 0.020956
2012-05-14 -2.685125
2012-12-27 0.494037
2013-06-09 -1.299026
2013-12-12 0.371309
2015-06-17 0.201656
为了填补这些缺失值,让我们创建一个新的DF与只是一个完整的索引与所有天
这样:
full_period = pd.DataFrame(index = pd.date_range('2000-01-01', '2016-12-31', freq='D'))
因为熊猫如何使用索引的,如果你弹出我们的例子中数据转换成一列,大熊猫将在遗漏值填充NaN
:
full_period['data'] = ts_sample.data
print full_period['2015-06-16':'2015-06-18']
,我只打印3天,以便我们可以看到它是如何弹出数据:
data
2015-06-16 NaN
2015-06-17 0.201656
2015-06-18 NaN
所以现在我们有全套用充满NaN
丢失数据的日常数据。现在,我们可以做的滚动平均值:
rolling = full_period.rolling(min_periods=1, window=365*5,center=False).mean() # daily data so using 5 years of days
print rolling['2015-06-16':'2015-06-18']
,并再次,打印相同的3个值:
data
2015-06-16 -0.619570
2015-06-17 -0.482699
2015-06-18 -0.482699
,如果你想选择回来只为您的原始日期的滚动平均值,可以用一个小班轮来做这件事:
print rolling.ix[ts_sample.index.tolist()]
data
2001-07-21 0.107343
2003-07-12 0.382940
2004-08-21 0.100847
2006-07-13 -0.141103
2011-12-14 0.020956
2012-05-14 -1.332085
2012-12-27 -0.723377
2013-06-09 -0.867290
2013-12-12 -0.619570
2015-06-17 -0.482699
这是超级有用的,我很欣赏你花在这个答案上的时间。只是为了确认,如果我想计算滚动10年移动平均值,我会设置窗口= 365 * 10是否正确? – spacedinosaur10
如果您将df中的每个单元格设置为一天,那么一年365年......所以,365 * 10 –