尝试加快一些代码的速度:在大型数据集中测量滚动百分比等级

时间:2019-07-17 15:41:27

标签: python-3.x pandas performance

本质上与以下未解决的问题类似:How to speed up creation of rolling sum (LTM) in pandas with large dataset?

我有以下代码来测量df列上的滚动百分等级,仅在整个数字窗口(即没有“ nan”值)可用时才开始,并用这些值填充新的单列df: / p>

def percent_rank(df, period_1):
    window_size = period_1
    for i in range(len(df.index)):
        if not np.isnan(float(df.iloc[i])):
            start_date = i
            break
    df_percent_rank = pd.DataFrame(index=df.index)
    df_percent_rank[df.columns.values[0]] = "nan"

    for i in range(start_date, len(df.index)-window_size+1):
        window = df.iloc[i:i+window_size]
        last_data = float(window.iloc[-1])
        rank = stats.percentileofscore(window, last_data, kind='mean')
        df_percent_rank.iloc[i+window_size-1] = rank
    return df_percent_rank

但是,我目前在循环中使用此函数,总共有40 df(每个df只有一列)作为参数传递,每个参数约有20,000行。结果,我的代码的这一部分只花了几分钟,而其他所有东西都运行得非常快。

是否有更好的方法编写函数来加快过程?

感谢任何/所有帮助!

0 个答案:

没有答案