Допустим есть табличка:
import pandas as pd
data = {
'one': list(range(2, 15, 4)),
'two': list(range(4, 16, 3))
}
df = pd.DataFrame(data)
df
- one two
0 2 4
1 6 7
2 10 10
3 14 13
Есть метод обработки данных:
def compute(df):
df['rol1'] = df.rolling(3, min_periods=1).one.mean()
df['rol2'] = df.rolling(3, min_periods=1).two.quantile(0.5)
df['rol3'] = df.rolling(2, min_periods=1).rol2.min()
return df
df = compute(df)
df
В результате получаем:
- one two rol1 rol2 rol3
0 2 4 2.0 4.0 4.0
1 6 7 4.0 5.5 4.0
2 10 10 6.0 7.0 5.5
3 14 13 10.0 10.0 7.0
Отлично, а теперь после этого добавляется новая строка, допустим так:
newData = {'one': 13, 'two': 6}
df = df.append(newData, ignore_index=True)
df
В итоге добавляется строчка, а в остальных полях NaN
- one two rol1 rol2 rol3
0 2.0 4.0 2.0 4.0 4.0
1 6.0 7.0 4.0 5.5 4.0
2 10.0 10.0 6.0 7.0 5.5
3 14.0 13.0 10.0 10.0 7.0
4 13.0 6.0 NaN NaN NaN
Как теперь сказать pandas, что бы он посчитал только данные для последней строчки? Потому что если я снова вызову
df = compute(df)
он пересчитает всю таблицу. А при больших данных это довольно много времени, а я хотел бы работать с данными в реальном времени.
Есть вариант создать функцию копию и вместо rolling использовать tail, но делать копи паст одной и той же логики не хочется. Итоговый алгоритм в моей программе получается сложным и дублировать его тоже не хочется.
Заранее спасибо за ответ!)