Я хочу быстро запустить эту пользовательскую функцию для тысяч строк данных. То, как я думаю, чтобы решить эту проблему, занимает много времени.
Я пытался использовать .apply, но не вижу, как применить только к определенным строкам. Я думал о попытке сохранить предыдущее решение для строк в виде переменной, но не могу объяснить код и подумать, что это может быть та же скорость.
Приведенный ниже код является примером того, что я пытаюсь сделатьболее эффективным. Это похоже на версию Excel здесь https://www.youtube.com/watch?v=Dt0KQg52c6c&t=274s за 4 минуты 30 секунд
Я новичок в программировании и самообучении, если кто-то может указать мне направление, которое может помочь мне придумать способчтобы вычислить это в нецикличном разнообразии, это было бы очень полезно для меня и применимо к моему будущему пониманию кодирования, спасибо!
import pandas as pd
import numpy as np
import time
start_program = time.time()
df = pd.DataFrame({'Date':['2019-09-01','2019-09-02','2019-09-03','2019-09-04','2019-09-05','2019-09-06'], 'price':[10,8,5,20,50,60]})
df['Date'] = pd.to_datetime(df["Date"])
df.set_index('Date',inplace=True)
df.insert(1,'AVG', "")
df['AVG'] = df['AVG'].apply(pd.to_numeric)
df.iloc[3, df.columns.get_loc('AVG')] = np.mean(df['price'].iloc[0:4])
def avgfunc(df,target_column,price_column,row,num_avg):
df.iloc[row, df.columns.get_loc(target_column)] = ((df[target_column].iloc[row -1]*(num_avg - 1))+df[price_column].iloc[row])/num_avg
return df.iloc[row, df.columns.get_loc(target_column)]
leng = len(df['price'])
i=4
while i < leng:
avgfunc(df,'AVG','price',i,5)
i += 1
print(df)
end_program = time.time()
print("Total time to complete program is :", end_program - start_program)
$ python test_loop.py
price AVG
Date
2019-09-01 10 NaN
2019-09-02 8 NaN
2019-09-03 5 NaN
2019-09-04 20 10.75
2019-09-05 50 18.60
2019-09-06 60 26.88
Total time to complete program is : 0.03003978729248047