回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我在Python<code>pandas</code>包中与层次索引作斗争。具体地说,我不知道如何在数据被旋转后对行中的数据进行筛选和比较。</p>
<p>以下是文档中的示例表:</p>
<pre><code>import pandas as pd
import numpy as np
In [1027]: df = pd.DataFrame({'A' : ['one', 'one', 'two', 'three'] * 6,
'B' : ['A', 'B', 'C'] * 8,
'C' : ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 4,
'D' : np.random.randn(24),
'E' : np.random.randn(24)})
In [1029]: pd.pivot_table(df, values='D', rows=['A', 'B'], cols=['C'])
Out[1029]:
C bar foo
A B
one A -1.154627 -0.243234
B -1.320253 -0.633158
C 1.188862 0.377300
three A -1.327977 NaN
B NaN -0.079051
C -0.832506 NaN
two A NaN -0.128534
B 0.835120 NaN
C NaN 0.838040
</code></pre>
<p>我想分析如下:</p>
<p>1)根据列属性筛选此表,例如选择负<code>foo</code>行:</p>
<pre><code> C bar foo
A B
one A -1.154627 -0.243234
B -1.320253 -0.633158
three B NaN -0.079051
two A NaN -0.128534
</code></pre>
<p>2)比较不同的<code>A</code>序列组之间剩余的<code>B</code>序列值?我不知道如何访问此信息:<code>{'one':['A','B'], 'two':['A'], 'three':['B']}</code>并确定哪些序列<code>B</code>值对于每个键是唯一的,或者在多个键组中看到,等等</p>
<p>有没有一种方法可以直接在pivot表结构中执行此操作,或者需要将其转换回<code>pandas</code><code>dataframe</code>?</p>
<p><strong>更新:</strong>我认为这段代码是朝着正确方向迈出的一步。它至少允许我访问此表中的各个值,但我仍在对序列值进行硬编码:</p>
<pre><code>table = pivot_table(df, values='D', rows=['A', 'B'], cols=['C'])
table.ix['one', 'A']
</code></pre>