Как посчитать только новые данные в pandas, а не всю таблицу? - PullRequest
0 голосов
/ 29 мая 2020

Есть таблица:

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. Последний алгоритм в моей программе сложен, и я тоже не хочу его дублировать. Заранее спасибо за ответ!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...