使用内置的熊猫频率来模拟半年频率

时间:2012-11-14 18:16:18

标签: python pandas

我正在使用以DatetimeIndex索引的pandas时间序列,我需要支持半年频率。基本的半年频率为1H=Jan-Jun2H=Jul-Dec,但某些系列可能上个月是12月以外的月份,例如1H=Dec-May2H=Jun-Nov

我想通过制作一个源自pandas'DateOffset类的自定义类,我当然可以实现我想要的。然而,在我这样做之前,我很好奇是否有一种方法可以简单地使用内置频率,例如6个月的频率?我试图这样做,但无法按照我想要的方式重新采样。

例如:

import numpy as np
import pandas as pd
from datetime import datetime

data = np.arange(12)
s = pd.Series(data, pd.date_range(start=datetime(2007,1,31), periods=len(data), freq="M"))
s.resample("6M")

Out[11]:
2007-01-31    0.0
2007-07-31    3.5
2008-01-31    9.0
Freq: 6M

请注意pandas是如何使用8月1月和2月到7月的窗口进行聚合的。在这个基本情况下,我想要Jan-Jun和Jul-Dec。

1 个答案:

答案 0 :(得分:0)

您可以使用两个Series.resample()参数loffset=closed=的组合。

例如:

In [1]: import numpy as np, pandas as pd

In [2]: data = np.arange(1, 13)

In [3]: s = pd.Series(data, pd.date_range(start='1/31/2007', periods=len(data), freq='M'))

In [4]: s.resample('6M', how='sum', closed='left', loffset='-1M')
Out[4]: 
2007-06-30    21
2007-12-31    57

我使用loffset='-1M'告诉大熊猫比其默认值(将我们移至1月至6月)更早聚合一段时间。

我使用closed='left'使聚合器包含示例窗口的“左”端并排除“右”端(closed='right'是默认行为)。

注意:我使用how='sum'只是为了确保它按照我的想法行事。您可以使用任何适当的how