, ,
[source]
pd.Index.slice_indexer(start, stop), .
>>> dictionary = {"a": ("20130102", "20130105"),
... "b": "20130103",
... "c": ("20130103", "20130105")}
...
...
... def get_idx_pairs():
... for lvl0, lvl1 in df.index.groupby(df.index.get_level_values(0)).items():
... dates = lvl1.levels[1]
... dt = dictionary[lvl0]
... if isinstance(dt, (tuple, list)):
... slices = dates[dates.slice_indexer(dt[0], dt[1])]
... for s in slices:
... yield (lvl0, s)
... else:
... yield (lvl0, dt)
...
...
... df.loc[list(get_idx_pairs())]
...
0
letter date
a 2013-01-02 -1.1910
2013-01-03 1.4327
2013-01-04 -0.3127
2013-01-05 -0.7206
b 2013-01-03 0.0157
c 2013-01-03 -0.3341
2013-01-04 0.0021
2013-01-05 0.4055
"" DatetimeIndex date , (letter, date), .
, ( , ), :
>>> dates = (("20130102", "20130105"),
... ("20130103", "20130103"),
... ("20130103", "20130105"))
...
... def get_idx_pairs(df, dates):
... letters = df.index.get_level_values(0)
... for (k, v), (start, stop) in zip(df.index.groupby(letters).items(), dates):
... dates = v.levels[1]
... sliced = dates[dates.slice_indexer(start, stop)]
... for s in sliced:
... yield k, s
...
... df.loc[list(get_idx_pairs(df, dates))]
...
0
letter date
a 2013-01-02 -1.1910
2013-01-03 1.4327
2013-01-04 -0.3127
2013-01-05 -0.7206
b 2013-01-03 0.0157
c 2013-01-03 -0.3341
2013-01-04 0.0021
2013-01-05 0.4055