MultiIndexインデックスを持つDataFrameがあります。次のように再生成できます。
import pandas as pd
import numpy as np
from numpy.random import randn as randn
from numpy.random import randint as randint
from datetime import datetime
# setup data
obs1 = [ob if ob > 0 else ob *-1 for ob in randn(10)*100]
obs2 = [randint(1000) for i in range(10)]
labels = ['A12', 'B12', 'A12', 'A12', 'A12','B12', 'A12','B12', 'A13', 'B13']
dates = [datetime(2012, 11, i) for i in range(1,11)]
dates[0] = dates[1]
dates[5] = dates[6]
# setup index and dataframe
m_idx = pd.MultiIndex.from_tuples(zip(dates, labels), names=['date', 'label'])
data_dict = {'observation1':obs1, 'observation2':obs2}
df = pd.DataFrame(data_dict, index=m_idx)
出力:
In [17]: df
Out[17]:
observation1 observation2
date label
2012-11-02 A12 79.373668 224
B12 130.841316 477
2012-11-03 A12 45.312814 835
2012-11-04 A12 163.776946 623
2012-11-05 A12 115.449437 722
2012-11-07 B12 38.537737 842
A12 84.807516 396
2012-11-08 B12 35.186265 707
2012-11-09 A13 60.171620 336
2012-11-10 B13 123.750614 540
関心のある日付:
dates_of_interest = [datetime(2012,11,1), datetime(2012,11,6)]
次の基準のサブセットを使用してデータフレームを作成することに興味があります。
- 日付は、関心のある日付の1つに最も近い
- ラベルの文字列に「A」が含まれている
したがって、私のサブインデックスの結果は次のようになります。
observation1 observation2
date label
2012-11-02 A12 79.373668 224
2012-11-07 A12 84.807516 396
理想的には、基準の「近く」にあるすべての観測値のデータを取得できるため、返されるデータセットは次のようになります。
observation1 observation2
date label
2012-11-02 A12 79.373668 224
2012-11-05 A12 115.449437 722
2012-11-07 A12 84.807516 396
しかし、最初は、最初の結果が得られれば幸いです。searchsortとasofを使用する必要があると思いますが、その方法がよくわかりません。マルチインデックス。
ここからそこに行く方法を知っている人はいますか?
よろしく