本质上与以下未解决的问题类似: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行。结果,我的代码的这一部分只花了几分钟,而其他所有东西都运行得非常快。
是否有更好的方法编写函数来加快过程?
感谢任何/所有帮助!