Python 数据帧行多索引跳过一个

Python 数据帧行多索引跳过一个,python,pandas,multi-index,Python,Pandas,Multi Index,在选择数据帧中的第一个子索引和第三个子索引时,我无法跳过包括所有一个子索引: 我有一个数据帧测试,形式如下: signal dat1 dat2 dat3 condition epoch time A 0 -1100 1.001322 2.884899 -0.659933 -1099 1.081918 3.3894

在选择数据帧中的第一个子索引和第三个子索引时,我无法跳过包括所有一个子索引:

我有一个数据帧测试,形式如下:

signal                     dat1      dat2      dat3
condition epoch time                               
A         0     -1100  1.001322  2.884899 -0.659933
                -1099  1.081918  3.389470 -0.413069
                -1098  1.168483  3.585312 -0.277902
                -1097  1.237908  3.439242 -0.299783
                -1096  1.263452  2.942262 -0.496889
A         1     -1100  1.001322  2.884899 -0.659933
                -1099  1.081918  3.389470 -0.413069
                -1098  1.168483  3.585312 -0.277902
                -1097  1.237908  3.439242 -0.299783
                -1096  1.263452  2.942262 -0.496889
我想提取条件和时间点,结果表如下所示:

signal                     dat1      dat2      dat3
condition epoch time                               
A         0     -1000  1.001322  2.884899 -0.659933
                 -999  1.081918  3.389470 -0.413069
                 -998  1.168483  3.585312 -0.277902
                 -997  1.237908  3.439242 -0.299783
                 -996  1.263452  2.942262 -0.496889
A         1     -1000  1.001322  2.884899 -0.659933
                 -999  1.081918  3.389470 -0.413069
                 -998  1.168483  3.585312 -0.277902
                 -997  1.237908  3.439242 -0.299783
                 -996  1.263452  2.942262 -0.496889
我是熊猫队的新手,我尝试过各种各样的东西

我认为解决办法是:

test.loc['A',:,[-1000:-50]]
如果我选择的时间点相距小于50个数据点,它实际上是有效的;但是,对于更多内容,第一个索引将被忽略,它将返回第一个索引-1100中的所有值。我真的很奇怪。所以看起来很像这样:

In [284]: test.loc['A',:,-1000:-950].head()
Out[284]: 
signal                     dat1      dat2      dat3  
condition epoch time                                 
A         0     -1000  0.776851 -0.591070  0.435884 
                -999   0.908675 -1.042335  0.084967 
                -998   0.942239 -1.583269 -0.266314 
                -997   0.901392 -2.146548 -0.602187 
                -996   0.814778 -2.663253 -0.892899 
但接下来会发生这样的情况:

test.loc['A',:,-1000:-900].head()
Out[285]: 
signal                     dat1      dat2      dat3  
condition epoch time                                 
A         0     -1100  1.001322  2.884899 -0.659933  
                -1099  1.081918  3.389470 -0.413069  
                -1098  1.168483  3.585312 -0.277902  
                -1097  1.237908  3.439242 -0.299783  
                -1096  1.263452  2.942262 -0.496889  
我做错了什么,或者是否有其他简单/直观的索引我尝试了一些.ix,slice,但除了限制时间外,没有一个成功地选择了所有时代?

这是有效的:

import pandas as pd
import numpy as np

np.random.seed(0)
idx = pd.IndexSlice
midx = pd.MultiIndex.from_product([['A', 'B'], [0, 1], range(-1000, 0)])
df = pd.DataFrame(np.random.randn(4000, 3), columns=['dat1', 'dat2', 'dat3'], index=midx)
df.sort_index(inplace=True)

>>> df.loc[idx['A', :, -1000:-950], :].head()
               dat1      dat2      dat3
A 0 -1000  1.764052  0.400157  0.978738
    -999   2.240893  1.867558 -0.977278
    -998   0.950088 -0.151357 -0.103219
    -997   0.410599  0.144044  1.454274
    -996   0.761038  0.121675  0.443863
重新创建此问题可能是一个错误。请注意,在第二个head数据帧中,时间如何从-1100开始,尽管切片从-1000开始:

np.random.seed(0) 
midx = pd.MultiIndex.from_product([['CS'], range(20), range(-1100, 6000)]) 
df = pd.DataFrame(np.random.randn(7100*20, 3), columns=['dat1', 'dat2', 'dat3'], index=midx)

>>> df.loc[idx['CS', :, -1000:-950], :].head()
                dat1      dat2      dat3
CS 0 -1000 -1.306527  1.658131 -0.118164
     -999  -0.680178  0.666383 -0.460720
     -998  -1.334258 -1.346718  0.693773
     -997  -0.159573 -0.133702  1.077744
     -996  -1.126826 -0.730678 -0.384880

>>> df.loc[idx['CS', :, -1000:-50], :].head()
                dat1      dat2      dat3
CS 0 -1100  1.764052  0.400157  0.978738  # <<< Index Level 2 should start at -1000
     -1099  2.240893  1.867558 -0.977278
     -1098  0.950088 -0.151357 -0.103219
     -1097  0.410599  0.144044  1.454274
     -1096  0.761038  0.121675  0.443863

这使用的是Python 3.5.1 | Continuum Analytics,Inc.| default,2015年12月7日11:24:55和Pandas 0.18.0。

由错误引起;更新过去的修复或到pandas 0.18.2

顺便说一句。这发生在pandas 18.0上,有20个纪元,时间值从-1100到6000,这使我在修复的colonError处的语法错误为[-1000:-950]。在-1000:-950左右不需要括号,它确实适用于所有值的df,但在我的df上存在相同的问题。分层行子索引是否可能会干扰信号条件、历元、时间?我有一个这样的表,虽然我还不足以创建一个例子。你的多索引排序了吗?同样的道理,适用于-1000:950,但如果升到-950,则从1100开始。test.sort_indexlevel=1.loc[idx['A',:,-1000:-900]]头。我尝试了不使用level、level=0、level=1和组合。不变=