Код: Выделить всё
import pandas as pd
import numpy as np
ds = { 'trend' : [1,1,1,1,2,2,3,3,3,3,3,3,4,4,4,4,4], 'price' : [23,43,56,21,43,55,54,32,9,12,11,12,23,3,2,1,1]}
df = pd.DataFrame(data=ds)
display(df)
Код: Выделить всё
trend price
0 1 23
1 1 43
2 1 56
3 1 21
4 2 43
5 2 55
6 3 54
7 3 32
8 3 9
9 3 12
10 3 11
11 3 12
12 4 23
13 4 3
14 4 2
15 4 1
16 4 1
Код: Выделить всё
df.to_csv("df.csv", index = False)
- перебирает каждое и каждая запись кадра данных
- вычисляет экспоненциальную скользящую среднюю (EMA), учитывая цену, наблюдаемую на каждой итерации, и цены (длину EMA). в этом примере равно 2), наблюдавшихся в предыдущих тенденциях.
Например: - Я повторяю запись 0, и EMA равна NaN (отсутствует).
- Я повторяю запись 1, а EMA все еще NaN (отсутствует)
< /li>
Я повторяю запись 12, а EMA равна 24,20 (учитывается цена записи 3, цена записи 5 и цена записи 12
Я повторяю запись 13, а EMA равна 13,53 (учитывается цена записи 3, цена записи 5 и цена записи 13
Я выполняю итерацию на записи 15, а EMA равна 12,46 (он учитывает цену на записи 3, цену на записи 5 и цену на записи 15
и так далее.....
Код: Выделить всё
time_window = 2
ema= []
for i in range(len(df)):
ds = pd.read_csv("df.csv", nrows=i+1)
d = ds.groupby(['trend'], as_index=False).agg(
{'price':'last'})
d['ema2'] = d['price'].ewm(com=time_window - 1, min_periods=time_window).mean()
ema.append(d['ema2'].iloc[-1])
df['ema2'] = ema
Код: Выделить всё
print(df)
trend price ema2
0 1 23 NaN
1 1 43 NaN
2 1 56 NaN
3 1 21 NaN
4 2 43 35.666667
5 2 55 43.666667
6 3 54 49.571429
7 3 32 37.000000
8 3 9 23.857143
9 3 12 25.571429
10 3 11 25.000000
11 3 12 25.571429
12 4 23 24.200000
13 4 3 13.533333
14 4 2 13.000000
15 4 1 12.466667
16 4 1 12.466667
Кто-нибудь знает, как получить те же результаты, но быстро и эффективно, пожалуйста?
Подробнее здесь: https://stackoverflow.com/questions/790 ... iterations