相当于窗口的Spark rangeBetween的Python?

时间:2018-11-02 11:48:17

标签: python apache-spark pyspark

我正在尝试查找是否有一种方法可以在python中进行滚动聚合中的rangeBetween等效。在Spark中,您可以使用rangeBetween,使窗口不必在目标行上对称,即对于每行,我可以将-5h视为+ 3h:所有行都发生在5h之前和3h之后日期时间列。我知道python具有pd.rolling选项,但是在阅读所有文档后,我发现它似乎只需要1个输入作为窗口。您可以更改该窗口是否位于每一行的中心,但是我找不到一种明确设置它的方法,因此它可以查看我选择的范围。

有人知道我不知道的其他功能可以做到这一点吗?

1 个答案:

答案 0 :(得分:0)

我不确定这是否是最好的答案,但这是我的,并且可以正常工作,因此我想必须等到有更好的选择为止。我用它制作了一个python函数,因此您可以使用任何想要的聚合函数。

def rolling_stat(pdf, lower_bound, upper_bound, group , statistic = 'mean' )
    import pandas as pd
    import numpy as np
    import random
    from datetime import datetime, timedelta

    group = pdf[group].drop_duplicates()
    for grp in group:
        dataframe_grp = dataframe[dataframe['group']==grp]
        dataframe_grp.sort_index()
        for index, row in dataframe_grp.iterrows(): 
            lower= (index - timedelta(minutes = lower_bound))
            upper=  (index + timedelta(minutes = upper_bound))    
            agg = dataframe_grp.loc[lower:upper]['nbr'].agg([statistic])
            dataframe_grp.at[index, 'agg'] = agg[0]     
            data_agg = data_agg.append(dataframe_grp)