<h2>详细的多索引说明</h2>
<p>您可以使用<code>.loc</code>索引器从具有多重索引的数据帧中选择数据子集。假设我们有原始问题的数据:</p>
<pre><code> sales
year flavour day
2008 strawberry sat 10
sun 12
banana sat 22
sun 23
2009 strawberry sat 11
sun 13
banana sat 23
sun 24
</code></pre>
<p>这个数据帧在其索引中有3个级别,每个级别都有一个名称(<code>year</code>,<code>flavour</code>和{<cd4>})。级别还隐式地从外部给定以0开头的整数位置。因此,<code>year</code>级别可以被引用为<code>0</code>,<code>flavour</code>和{<cd8>},而{<cd4>}可以作为<code>2</code>。在</p>
<h3>从0级选择-最外层</h3>
<p>级别<code>0</code>是最容易进行选择的级别。例如,如果我们只想选择2008年,我们可以执行以下操作:</p>
^{pr2}$
<p>这会降低外部索引级别。如果要保持外部级别,可以将选择作为列表(或切片)传递:</p>
<pre><code>df.loc[[2008]] # df.loc[2008:2008] gets the same result
sales
year flavour day
2008 strawberry sat 10
sun 12
banana sat 22
sun 23
</code></pre>
<h3>从其他级别进行选择</h3>
<p>从级别0以外的任何级别进行选择更为复杂。让我们首先选择一个特定的组合,比如年份<code>2008</code>、<code>banana</code>和{<cd14>}。为此,将组合作为元组传递给<code>.loc</code>:</p>
<pre><code>df.loc[(2008, 'banana', 'sat')]
sales 22
Name: (2008, banana, sat), dtype: int64
</code></pre>
<p>我总是像上面那样使用括号,但是Python会自动将任何逗号分隔的值集解释为tuple,因此下面的结果将相同:</p>
<pre><code>df.loc[2008, 'banana', 'sat']
</code></pre>
<p>所有的级别都被降低了,一系列的数据被返回。我们可以通过在列表中传递元组来保持级别:</p>
<pre><code>df.loc[[(2008, 'banana', 'sat')]]
sales
year flavour day
2008 banana sat 22
</code></pre>
<h3>从特定级别选择多个值</h3>
<p>上一个示例从每个级别进行了单个选择。可以使用列表来包含所需级别的所有值。例如,如果我们想选择2008年和2009年的所有行,带有香蕉味,周六和周日,我们可以执行以下操作:</p>
<pre><code>df.loc[([2008, 2009], 'banana', ('sat','sun'))]
sales
year flavour day
2008 banana sat 22
sun 23
2009 banana sat 23
sun 24
</code></pre>
<p>同样,您不必用paraenthes包装整个选择来表示元组,只需执行以下操作:</p>
<pre><code>df.loc[[2008, 2009], 'banana', ('sat','sun')]
</code></pre>
<h3>从特定级别选择所有值。</h3>
<p>相反,您可能希望从特定级别选择所有值。例如,让我们试着选择所有年份、所有口味和周六。您可能认为以下方法可行:</p>
<pre><code>df.loc[:, :, 'sat']
</code></pre>
<p>但是,这会遇到“太多索引器的索引器错误”。从特定级别选择所有值有三种不同的方法。在</p>
<ul>
<li><code>df.loc[(slice(None), slice(None), 'sat'), :]</code></li>
<li><code>df.loc(axis=0)[:, :, 'sat']</code></li>
<li><code>df.loc[pd.IndexSlice[:, :, 'sat'], :]</code></li>
</ul>
<p>三者都产生了以下结果:</p>
<pre><code> sales
year flavour day
2008 strawberry sat 10
banana sat 22
2009 strawberry sat 11
banana sat 23
</code></pre>