0

我正在使用以 a 为索引的 pandas 时间序列DatetimeIndex,并且我需要支持半年频率。基本的半年频率有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。

4

1 回答 1

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'告诉 pandas 聚合一个比默认时间早的时间段(将我们移至一月至六月)。

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

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

于 2012-11-14T20:39:03.303 回答