Получить запаздывающие даты для манекена в pandas - PullRequest
0 голосов
/ 06 мая 2020

У меня есть фрейм данных следующего типа:

                                 dummy1  ret
Date       Index                            
1998-01-01 AAPL US                0.0  0.000
           AEX                    0.0  0.000
           AMZN US                0.0  0.000
           AS51                   0.0  0.000
           AS51 1Y 100 VOL BVOL   0.0    NaN
                               ...    ...
2016-12-29 W A Comdty             0.0    NaN
           WIV                    0.0  0.007
           WZ1 Comdty             0.0  0.005
           XLE US                 0.0 -0.002
           ZARUSD Curncy          0.0  0.018

Переменная dummy1 равна 1 в указанные c даты, которые не всегда одинаковы для различных идентификаторов, содержащихся на уровне Index мультииндекс, в противном случае - ноль. Моя цель - создать новую фиктивную переменную (или индикаторную переменную), скажем, dummy2, которая равна 1 в предыдущий рабочий день, когда dummy1 равно 1. Итак, dummy2 должен быть равен 1 за день до того, как dummy1 станет равным 1. Как я могу это сделать? Если бы мне пришлось извлечь список дат, в которых dummy1 равен 1, использование pd.offest.BusinessDays(n=1) могло бы быть идеей, но меня беспокоит то, что тогда я потеряю индекс фрейма данных, что имеет решающее значение, потому что, как упоминалось выше , dummy1 равно 1 не одновременно (т.е. дата) для разных значений Index.

1 Ответ

0 голосов
/ 06 мая 2020

Я действительно нашел очень удобное и элегантное решение, основанное на методе сдвига. Если df - это наш фрейм данных:

df.reset_index(inplace=True)
df['dummy2']=df.groupby(['Index'])['dummy1'].shift(-1)
df.set_index(['Date', 'Index'], inplace=True)

Таким образом я могу просто сдвинуть на один день до даты фиктивного 1, отслеживая различия в слое Index Multiindex

...