<p>这是一个愚蠢的方法,但你可以用事实</p>
<blockquote>
<p>passing a list of labels or tuples works similar to reindexing [<a href="https://pandas.pydata.org/pandas-docs/stable/advanced.html#advanced-indexing-with-hierarchical-index" rel="nofollow noreferrer">source</a>]</p>
</blockquote>
<p>并利用<code>pd.Index.slice_indexer(start, stop)</code>,它允许您将每个索引过滤到指定日期之间。在</p>
<pre><code>>>> 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
</code></pre>
<p>对于<code>date</code>中的每个“较小”DatetimeIndex,将其约束到指定的片段,然后构造<code>(letter, date)</code>的元组,并在其上显式索引。在</p>
<p>或者,如果您可以将日期指定为元组(对于单个日期,只需重复),则可以稍微压缩helper函数:</p>
^{pr2}$