#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
В качестве альтернативы, если возможно, удалите ненужные даты перед настройкой мультииндекса.