Интерполировать данные запаса в pandas, используя 2 столбца - PullRequest
0 голосов
/ 11 марта 2020

Я хочу сделать интерполяцию котировок акций. У меня отсутствуют данные за один день (как в примере):

import numpy as np
import pandas as pd
dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(
    {'opening': [0.5, 1.3, np.NaN, 4, 5, 1],
     'closing': [0, 1, np.NaN, 2, 10, 2]}, index=dates)

            opening  closing
2013-01-01      0.5      0.0
2013-01-02      1.3      1.0
2013-01-03      NaN      NaN
2013-01-04      4.0      2.0
2013-01-05      5.0     10.0
2013-01-06      1.0      2.0

Мне нужен метод для эффективной интерполяции NaN, который closing из 2013-01-02 равен opening из 2013-01-03 и opening из 2013-01-04 составляет closing из 2013-01-03. Требуемый вывод:

2013-01-01      0.5      0.0
2013-01-02      1.3      1.0
2013-01-03      1.0      4.0
2013-01-04      4.0      2.0
2013-01-05      5.0     10.0
2013-01-06      1.0      2.0

Я пытался использовать команду apply, но она содержит информацию только о текущей строке. Мне нужен доступ к предыдущему и следующему ряду.

1 Ответ

3 голосов
/ 11 марта 2020

Используйте DataFrame.assign, так как необходимо заменить значения mssing на прямое или обратное заполнение 'paralel':

df = df.assign(opening = df['opening'].fillna(df['closing'].ffill()),
               closing = df['closing'].fillna(df['opening'].bfill()))
print (df)
            opening  closing
2013-01-01      0.5      0.0
2013-01-02      1.3      1.0
2013-01-03      1.0      4.0
2013-01-04      4.0      2.0
2013-01-05      5.0     10.0
2013-01-06      1.0      2.0
...