熊猫在n年内获得30天的滚动窗口

时间:2019-03-11 15:01:47

标签: python pandas time-series pandas-groupby rolling-computation

我试图获取一个30天的窗口,该窗口从数据框中的所有日期开始倒退,而且还要查看数据集中所有年份中相同的30天的窗口。日期为2000-2019年。例如,从2000年2月1日开始,我想抓住其他所有年份的前30天以及2月1日之前的30天。

对于z评分,我可以在n天内使用滚动窗口:

dt= pd.date_range(start='2000-01-01', end='2019-03-01')
x=[randint(0,100) for x in range(len(dt))]
DTX = pd.DataFrame({'X': x}, index=dt)

def zscore(x, window):
    """ calculate z-score across a window (assumes normal distribution) """
    r = x.rolling(window=window)
    m = r.mean().shift(1)
    s = r.std(ddof=0).shift(1)
    z = (x-m)/s
    return z

DTX['Z'] = zscore(DTX['X'], 30)

或窗口的等级:

def ranked_percent(col, window):
    """ rank values in a window as a decimal (highest=1)"""
    pctrank = lambda x: pd.Series(x).rank(pct=True).iloc[-1]
    rollingrank=col.rolling(window=window,raw=False).apply(pctrank)
    return rollingrank

DTX['Rank'] = ranked_percent(DTX['X'], 30)

我想知道是否可能使用groupby和grouper,但不知道如何实现它? -尽管不愿意这样做,但是任何(相当矢量化/快速)的python解决方案都可以提供帮助。我确实需要将其扩展到数据集中的所有年份。我将不胜感激任何帮助??非常感谢

0 个答案:

没有答案