Выбор индекса даты и времени из списка даты и времени в пандах

avatar
Slartibartfast
1 июля 2021 в 18:51
28
1
1

У меня есть индекс даты и времени в pandas:

    High    Low     Open    Close   Volume  Adj Close
Date                        
2021-01-04  14147.950195    13953.750000    14104.349609    14132.900391    495000  14132.900391
2021-01-05  14215.599609    14048.150391    14075.150391    14199.500000    492500  14199.500000
2021-01-06  14244.150391    14039.900391    14240.950195    14146.250000    632300  14146.250000
2021-01-07  14256.250000    14123.099609    14253.750000    14137.349609    559200  14137.349609
2021-01-08  14367.299805    14221.650391    14258.400391    14347.250000    613500  14347.250000
...     ...     ...     ...     ...     ...     ...
2021-06-21  15765.150391    15505.650391    15525.849609    15746.500000    351500  15746.500000
2021-06-22  15895.750000    15752.099609    15840.500000    15772.750000    322200  15772.750000
2021-06-23  15862.950195    15673.950195    15862.799805    15686.950195    287500  15686.950195
2021-06-24  15821.400391    15702.700195    15737.299805    15790.450195    316700  15790.450195
2021-06-25  15870.799805    15772.299805    15839.349609    15860.349609    314600  15860.349609

118 rows × 6 columns

У меня также есть список дат в списке:

[datetime.date(2021, 1, 4),
 datetime.date(2021, 1, 11),
 datetime.date(2021, 1, 18),
 datetime.date(2021, 1, 25),
 datetime.date(2021, 2, 1),
 datetime.date(2021, 2, 8),
 datetime.date(2021, 2, 15),
 datetime.date(2021, 2, 22),
 datetime.date(2021, 3, 1),
 datetime.date(2021, 3, 8),
 datetime.date(2021, 3, 15),
 datetime.date(2021, 3, 22),
 datetime.date(2021, 3, 29),
 datetime.date(2021, 4, 5),
 datetime.date(2021, 4, 12),
 datetime.date(2021, 4, 19),
 datetime.date(2021, 4, 26),
 datetime.date(2021, 5, 3),
 datetime.date(2021, 5, 10),
 datetime.date(2021, 5, 17),
 datetime.date(2021, 5, 24),
 datetime.date(2021, 5, 31),
 datetime.date(2021, 6, 7),
 datetime.date(2021, 6, 14),
 datetime.date(2021, 6, 21),
 datetime.date(2021, 6, 28),
 datetime.date(2021, 7, 5),
 datetime.date(2021, 7, 12),
 datetime.date(2021, 7, 19),
 datetime.date(2021, 7, 26),
 datetime.date(2021, 8, 2),
 datetime.date(2021, 8, 9),
 datetime.date(2021, 8, 16),
 datetime.date(2021, 8, 23),
 datetime.date(2021, 8, 30),
 datetime.date(2021, 9, 6),
 datetime.date(2021, 9, 13),
 datetime.date(2021, 9, 20),
 datetime.date(2021, 9, 27),
 datetime.date(2021, 10, 4),
 datetime.date(2021, 10, 11),
 datetime.date(2021, 10, 18),
 datetime.date(2021, 10, 25),
 datetime.date(2021, 11, 1),
 datetime.date(2021, 11, 8),
 datetime.date(2021, 11, 15),
 datetime.date(2021, 11, 22),
 datetime.date(2021, 11, 29),
 datetime.date(2021, 12, 6),
 datetime.date(2021, 12, 13),
 datetime.date(2021, 12, 20),
 datetime.date(2021, 12, 27)]

Не все даты есть в pandas df. Что я хочу сделать, так это выбрать только те даты, которые есть в списке, а не какие-либо другие даты. Решение, которое я придумал, состоит в том, чтобы использовать цикл for в диапазоне datetime для «loc» для индекса даты и времени в df и добавить его к другому фрейму данных. Мне интересно, есть ли более простой способ сделать это?

Источник

Ответы (1)

avatar
Mustafa Aydın
1 июля 2021 в 19:02
2

Вы можете использовать pd.Index.isin, чтобы проверить, находятся ли значения индекса вашего фрейма данных в заданном списке; это вернет массив True/False, с помощью которого вы можете индексировать исходный фрейм данных, чтобы выбрать строки, индексы которых находятся в списке:

dates_in_list = df.index.isin(your_list)
new_df = df[dates_in_list]
Slartibartfast
1 июля 2021 в 19:10
1

Спасибо за помощь.