モチベーション
複数日にまたがるデータから特定の時間帯(例えば株式市場の開いている時間)などを取り出したいとき、datetime.datetimeオブジェクトとの比較ではうまくいかない(datetime.datetimeオブジェクトは年月日を指定しなければならないため、一つのオブジェクトとの単純な比較ではかけない)しどのようにすればよいのかわからなかった。
手法
結論から言うとdatetime.timeをうまく用いればよい。panda.Timestampはdatetime.datetimeを継承しているので、datetime.datetimeの持つ種々のメソッドを持っている。datetime.datetimeオブジェクトはdatetime.timeを返す関数timeを持っているので、それと目的の時刻をdatetime.timeとしたものをうまく比較すればよい。すなわち
df[(df["time"].apply(lambda x:x.time()) > time(huga)) & (df["time"].apply(lambda x:x.time()) < time(huge)) ]
のように選んでやればよい。
#具体例
例えば9時から15時のみのデータを取り出したいときは以下のようにすればよい。
import numpy as np
import pandas as pd
from datetime import time,timedelta
start = pd.Timestamp("2017-12-01")
end = pd.Timestamp("2017-12-03")
df = pd.DataFrame( pd.date_range(start, end ,freq="10T"),columns = ["time"])
df[(df["time"].apply(lambda x:x.time()) > time(hour=9)) & (df["time"].apply(lambda x:x.time()) < time(hour=15)) ]
もっと良いやり方があるかもしれないので編集リクエスト待ってます。