Есть таблица:
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)
, он вычислит всю таблицу. А с большими данными это довольно много времени, но я бы хотел работать с данными в реальном времени. Есть возможность создать функцию копирования и использовать tail
вместо rolling
, но я не хочу делать пасты из того же logi c. Последний алгоритм в моей программе сложен, и я тоже не хочу его дублировать. Заранее спасибо за ответ!)