2015-01-21 2 views
4

Мне нужно отфильтровать данные в определенные часы. Функция DataFrame между_time, по-видимому, является правильным способом сделать это, однако она работает только с столбцом индекса в dataframe; но мне нужно иметь данные в исходном формате (например, сводные таблицы ожидают, что столбец datetime будет иметь собственное имя, а не как индекс).Фильтрация Pandas - между_time на столбце без индекса

Это означает, что каждый фильтр выглядит примерно так:

df.set_index(keys='my_datetime_field').between_time('8:00','21:00').reset_index() 

что означает, что есть два индексирование этого действия каждый раз, когда такой фильтр запускается.

Это хорошая практика или есть более подходящий способ сделать то же самое?

ответ

8

Создайте DatetimeIndex, но сохраните его в переменной, а не в DataFrame. Затем назовите это indexer_between_time метод. Это возвращает целочисленный массив, который затем может быть использован для выбора строк из df с помощью iloc:

import pandas as pd 
import numpy as np 

N = 100 
df = pd.DataFrame(
    {'date': pd.date_range('2000-1-1', periods=N, freq='H'), 
    'value': np.random.random(N)}) 

index = pd.DatetimeIndex(df['date']) 
df.iloc[index.indexer_between_time('8:00','21:00')] 
+0

Можно также использовать ломтик индексатор ломтик основанный на даты 'df.iloc [index.slice_indexer («2017-12»)] ' – Matts