Разрезание диапазона временных рядов в многоиндексном фрейме данных

#python #pandas #dataframe #slice

Вопрос:

У меня есть фрейм данных, который отслеживает цену закрытия Adj для нескольких глобальных рынков, что приводит к повторяющимся датам. Чтобы очистить это, я использую .set_index(['Index Ticker', 'Date']) .

Образец кадра данных

Моя проблема в том, что цены закрытия действовали еще в 1997-07-02 годах, но мне нужно только 2020-01-01 и вперед. Я попытался использовать idx = pd.IndexSlice , за которым следует, df.loc[idx[ :, '2020-01-01':], :] а также df.loc[(slice(None), '2020-01-01':), :] , но оба метода возвращают синтаксическую ошибку в : том, что я использую для среза по диапазону дат. Какие-нибудь советы по получению необходимых мне данных после определенной даты? Заранее благодарю вас!

Комментарии:

1. Трудно сказать без некоторых выборочных данных. Но я думаю, что на этот раз df.loc[idx[ :, '2020-01-01':]. :] точка ( . ) должна была быть запятой df.loc[idx[ :, '2020-01-01':], :]

2. Извините за это, это была просто опечатка. Я исправил это до запятой, все та же проблема, пытаясь срезать определенный диапазон дат. Добавлено изображение фактического кадра данных, который я пытаюсь срезать, чтобы получить те же столбцы, но ни одно из значений до ‘2020-01-01’

Ответ №1:

Попробуй:

 # create dataframe to approximate your data
df = pd.DataFrame({'ticker' : ['A']*5   ['M']*5, 
                   'Date' : pd.date_range(start='2021-01-01', periods=5).tolist()   pd.date_range(start='2021-01-01', periods=5).tolist(),
                   'high' : range(10)}
                 ).groupby(['ticker', 'Date']).sum()

                   high
ticker Date
A      2021-01-01     0
       2021-01-02     1
       2021-01-03     2
       2021-01-04     3
       2021-01-05     4
M      2021-01-01     5
       2021-01-02     6
       2021-01-03     7
       2021-01-04     8
       2021-01-05     9

# evaluate conditions against level 1 (Date) of your multiIndex; level 0 is ticker
df[df.index.get_level_values(1) > '2021-01-03']

                  high
ticker Date
A      2021-01-04     3
       2021-01-05     4
M      2021-01-04     8
       2021-01-05     9
 

В качестве альтернативы, если возможно, удалите ненужные даты перед настройкой мультииндекса.