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和组合。不变=