3

我有以下 python pandas 时间序列

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')

resample 函数从最早的日期开始到最后一个日期。我得到的输出如下:

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 ...

任何人都可以请帮忙..提前谢谢

4

3 回答 3

4

好的,这比它应该的要复杂 - 但是这里有

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
于 2013-03-21T16:43:32.010 回答
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
于 2013-03-21T16:01:22.300 回答
0

这些事情往往比你最初预期的要复杂得多。我同意 Chang 的观点,有一个非常清晰的例子来说明应该如何精确对齐会有所帮助。请注意,示例中的输入数据也具有每月频率也很重要。例如,如果输入频率为天,则上述解决方案的最终对齐方式会发生变化,请参阅:

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

这一切都取决于您如何定义垃圾箱的开始和结束。

于 2013-03-22T08:31:05.610 回答