2013-03-21 62 views
2

我有以下蟒蛇大熊猫时间序列如何改变重采样的蟒蛇时间序列顺序

index = pandas.date_range('4/1/2012','9/30/2012', freq='M') 
df = pandas.DataFrame(numpy.random.randn(len(index),1), index=index) 
df = 
2012-04-30 1.06 
2012-05-31 0.82 
2012-06-30 0.65 
2012-07-31 1.12 
2012-08-31 1.09 
2012-09-30 0.65 

然后我改变频率从一个月到两个月

df_new = df.resample('2M') 

重采样功能开始从最早的日期到最后的日期。我得到的输出如下:

df_new = 
2012-04-30 ... 
2012-06-30 ... 
2012-08-31 ... 
2012-10-30 ... 

而我想要算法以相反的顺序重新采样。我想输出是这样的:

df_new = 
2012-05-31 ... 
2012-07-31 ... 
2012-09-30 ... 

任何人都可以请这方面的帮助..在此先感谢

回答

1

使用loffset参数:

In [8]: df 
Out[8]: 
        0 
2012-04-30 0.667305 
2012-05-31 -1.353332 
2012-06-30 0.132986 
2012-07-31 -0.697344 
2012-08-31 -1.043487 
2012-09-30 -0.050352 

In [9]: df.resample('2M', loffset='M') 
Out[9]: 
        0 
2012-05-31 0.667305 
2012-07-31 -0.610173 
2012-09-30 -0.870416 
2012-11-30 -0.050352 
+0

请参阅下面的user1827356答案,你实际上需要loffset和how ='last' – 2013-03-21 17:49:03

3

OK,这是比它更复杂应该是 - 但这里去

In [282]: df 
Out[282]: 
        0 
2012-04-30 0.583255 
2012-05-31 -0.247403 
2012-06-30 0.816290 
2012-07-31 -1.989587 
2012-08-31 0.740463 
2012-09-30 0.971749 


In [279]: df.resample('2M', how='last', closed='left', loffset='-1M') 
Out[279]: 
        0 
2012-05-31 -0.247403 
2012-07-31 -1.989587 
2012-09-30 0.971749 


how='last' gets last value in group 
closed='left' forces first date[2012-04-30] to be the start of the group (maybe side effect) 
loffset='-1M' adjust label appropriately 
+0

oh hmm ...实际上重读这个问题我认为你说得对'loffset'是不够的,你需要how = '最后'和loffset。我希望这个问题包含所需的数据对齐方式,因此它更清晰。 – 2013-03-21 17:49:47

+0

how ='last'有帮助,但并不能完全解决问题。这是因为重采样假设第一个日期[2012-04-30]是时间段结束[6M]。如果这可以通过参数进行控制,则可以解决问题 – user1827356 2013-03-21 18:29:46

0

这些事情往往是很多比较棘手,那么你会首先期待。我同意张,这将有助于有一个非常明确的例子,如何确切的路线应该是。请注意,示例中的输入数据也具有每月频率也很重要。断上述方案的变化,例如,如果输入频率为天最后的对准,参见:

import pandas as pd 

index = pd.date_range('4/1/2012','9/30/2012', freq='D') 
df = pd.DataFrame({'Date': index, 'Doy': index.dayofyear}, index=index) 

df.resample('2M', how='last', closed='left', loffset='-1M') 

          Date Doy 
2012-04-30 2012-05-30 00:00:00 151 
2012-06-30 2012-07-30 00:00:00 212 
2012-08-31 2012-09-29 00:00:00 273 
2012-10-31 2012-09-30 00:00:00 274 

备选地,可以使用的“MS”频率,创造另一种方法中:

df.resample('2MS', how='last', loffset='2M') 

          Date Doy 
2012-05-31 2012-05-31 00:00:00 152 
2012-07-31 2012-07-31 00:00:00 213 
2012-09-30 2012-09-30 00:00:00 274 

它一切都归结为如何定义垃圾桶的开始和结束。