我正在使用以DatetimeIndex
索引的pandas时间序列,我需要支持半年频率。基本的半年频率为1H=Jan-Jun
和2H=Jul-Dec
,但某些系列可能上个月是12月以外的月份,例如1H=Dec-May
和2H=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。
答案 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
。