我有一个数据帧,我从一个csv文件加载,然后通过set_index方法将索引设置为少数列(通常是两个或三个).我们的想法是使用几个组合键访问数据框的各个部分,如下所示:
df.set_index(['fileName','phrase'])
df.ix['somePath','somePhrase']
Run Code Online (Sandbox Code Playgroud)
显然,只有当数据帧的多索引被分类到足够的深度时,才能进行这种具有多个键的选择.在这种情况下,由于im提供两个密钥,只有当数据帧多索引被分类到至少为2的深度时,.ix操作才会失败.
出于某种原因,当我设置如图所示的索引时,对我而言,似乎两个层都已排序,调用 set_index命令返回1,并且在尝试使用两个键访问时出现以下错误:MultiIndex
有帮助吗?
Jef*_*eff 12
你不是很清楚你在问什么.多索引文档在这里
OP需要设置索引,然后进行排序
df.set_index(['fileName','phrase'],inplace=True)
df.sortlevel(inplace=True)
Run Code Online (Sandbox Code Playgroud)
然后通过元组访问这些级别以获得特定结果
df.ix[('somePath','somePhrase')]
Run Code Online (Sandbox Code Playgroud)
也许只是给出这样的玩具示例并显示我想得到一个特定的结果.
In [1]: arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'])
...: .....: ,
...: .....: np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])
...: .....: ]
In [2]: df = DataFrame(randn(8, 4), index=arrays)
In [3]: df
Out[3]:
0 1 2 3
bar one 1.654436 0.184326 -2.337694 0.625120
two 0.308995 1.219156 -0.906315 1.555925
baz one -0.180826 -1.951569 1.617950 -1.401658
two 0.399151 -1.305852 1.530370 -0.132802
foo one 1.097562 0.097126 0.387418 0.106769
two 0.465681 0.270120 -0.387639 -0.142705
qux one -0.656487 -0.154881 0.495044 -1.380583
two 0.274045 -0.070566 1.274355 1.172247
In [4]: df.index.lexsort_depth
Out[4]: 2
In [5]: df.ix[('foo','one')]
Out[5]:
0 1.097562
1 0.097126
2 0.387418
3 0.106769
Name: (foo, one), dtype: float64
In [6]: df.ix['foo']
Out[6]:
0 1 2 3
one 1.097562 0.097126 0.387418 0.106769
two 0.465681 0.270120 -0.387639 -0.142705
In [7]: df.ix[['foo']]
Out[7]:
0 1 2 3
foo one 1.097562 0.097126 0.387418 0.106769
two 0.465681 0.270120 -0.387639 -0.142705
In [8]: df.sortlevel(level=1)
Out[8]:
0 1 2 3
bar one 1.654436 0.184326 -2.337694 0.625120
baz one -0.180826 -1.951569 1.617950 -1.401658
foo one 1.097562 0.097126 0.387418 0.106769
qux one -0.656487 -0.154881 0.495044 -1.380583
bar two 0.308995 1.219156 -0.906315 1.555925
baz two 0.399151 -1.305852 1.530370 -0.132802
foo two 0.465681 0.270120 -0.387639 -0.142705
qux two 0.274045 -0.070566 1.274355 1.172247
In [10]: df.sortlevel(level=1).index.lexsort_depth
Out[10]: 0
Run Code Online (Sandbox Code Playgroud)