我有一个dataframe,它是从csv文件加载的,然后通过set_index方法将索引设置为它的几个列(通常是两个或三个)。这样做的目的是使用几个关键组合访问数据文件的各个部分,如下所示:
df.set_index(['fileName','phrase'])
df.ix['somePath','somePhrase']显然,这种具有多个键的选择只有在数据的MultiIndex被排序到足够的深度时才有可能。在这种情况下,由于im提供了两个键,所以只有当数据格式的.ix被排序到至少2的深度时,MultiIndex操作才不会失败。
由于某些原因,当Im设置索引时,在我看来这两个层似乎都已排序,调用df.index.lexsort_depth命令将返回1,并且在尝试使用两个键访问时会出现以下错误:
MultiIndex词汇排序深度1,键长2
有什么帮助吗?
发布于 2013-11-14 16:17:55
你要问什么还不太清楚。多索引文档是这里。
OP需要设置索引,然后进行排序。
df.set_index(['fileName','phrase'],inplace=True)
df.sortlevel(inplace=True)然后通过元组访问这些级别以获得特定的结果。
df.ix[('somePath','somePhrase')]也许给出一个这样的玩具例子,并表明我想得到一个具体的结果。
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]: 0https://stackoverflow.com/questions/19981518
复制相似问题