Заполните несколько строк между строками данных pandas при условии - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть набор данных, как показано ниже:

pd.DataFrame({'Date':['2019-01-01','2019-01-03','2019-01-01','2019-01-04','2019-01-01','2019-01-03'],'Name':['A','A','B','B','C','C'],'Open Price':[100,200,300,400,500,600],'Close Price':[200,300,400,500,600,700]})

Теперь мы можем видеть, что в этой таблице пропущено несколько дневных записей.то есть 2019-01-02 для A и 2019-01-02, 2019-01-03 для B и 2019-01-02 для C.

Что я хочу сделать, это добавить фиктивные строки вдата-фрейм для этих дат,

и столбец цены закрытия, аналогичный следующему открытию цены на следующий день.И мне плевать на цену открытия, она может быть либо в нан, либо в 0

Ожидаемый результат

pd.DataFrame({'Date':['2019-01-01','2019-01-02','2019-01-03','2019-01-01','2019-01-02','2019-01-03','2019-01-04','2019-01-01','2019-01-02','2019-01-03'],'Name':['A','A','A','B','B','B','B','C','C','C'],'Open Price':[50,'nan',150,250,'nan','nan',350,450,'nan',550],'Close Price':[200,150,300,400,350,350,500,600,550,700]})

Любая помощь будет оценена!

1 Ответ

0 голосов
/ 19 сентября 2019

Ваша логика нечеткая в том, как следует интерполировать цены, но чтобы начать, подумайте об этом, не забывая вводить дату в dtime datetime:

df['Date'] = pd.to_datetime(df['Date'])
df = (df.groupby('Name')
        .resample('D', on='Date')
        .mean()
        .swaplevel()
        .interpolate()
)

print(df)
                 Open Price  Close Price
Date       Name                         
2019-01-01 A     100.000000   200.000000
2019-01-02 A     150.000000   250.000000   
2019-01-03 A     200.000000   300.000000
2019-01-01 B     300.000000   400.000000
2019-01-02 B     333.333333   433.333333
2019-01-03 B     366.666667   466.666667
2019-01-04 B     400.000000   500.000000  
2019-01-01 C     500.000000   600.000000
2019-01-02 C     550.000000   650.000000
2019-01-03 C     600.000000   700.000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...