Python 浮动作为多索引中的索引器

Python 浮动作为多索引中的索引器,python,pandas,Python,Pandas,我有一个以(p,t)元组的形式具有多索引的数据帧,其中p和t是浮点数。当我试图通过切片(idx=IndexSlice)选择某个p值时,我得到以下错误: df.loc[idx[1.5,:]] /usr/local/lib/python2.7/dist-packages/pandas-0.14.0rc1-py2.7-linux-x86_64.egg/pandas/core/index.py:496: FutureWarning: scalar indexers for index type Mul

我有一个以(p,t)元组的形式具有多索引的数据帧,其中p和t是浮点数。当我试图通过切片(
idx=IndexSlice
)选择某个p值时,我得到以下错误:

df.loc[idx[1.5,:]]
/usr/local/lib/python2.7/dist-packages/pandas-0.14.0rc1-py2.7-linux-x86_64.egg/pandas/core/index.py:496:
 FutureWarning: scalar indexers for index type MultiIndex should be integers and not floating point
我有办法解决这个问题吗

输入数据帧:

Pump  Time  
10.0  -10.60    0.000005
      -10.59    0.000031
      -10.58    0.000007
      -10.57   -0.000020
      -10.56   -0.000000
      -10.55    0.000005
      -10.54   -0.000013
      -10.53   -0.000049
      -10.52   -0.000031
      -10.51   -0.000041
      -10.50    0.000022
      -10.49   -0.000045
      -10.48   -0.000070
      -10.47   -0.000025
      -10.46    0.000002
...
-0.05  4.05      0.000610
       6.05      0.000443
       8.05      0.000318
       10.05     0.000380
       12.05    -0.000063
       14.05     0.000578
       16.05     0.000236
       18.05     0.000472
       20.05     0.001628
       40.05     0.000243
       60.05     0.000426
       80.05     0.000361
       100.05    0.000693
       120.05    0.000478
       140.05    0.000398
Name: p1Up, Length: 4400, dtype: float64
期望输出:

Pump  Time  
-0.05  4.05      0.000610
       6.05      0.000443
       8.05      0.000318
       10.05     0.000380
       12.05    -0.000063
       14.05     0.000578
       16.05     0.000236
       18.05     0.000472
       20.05     0.001628
       40.05     0.000243
       60.05     0.000426
       80.05     0.000361
       100.05    0.000693
       120.05    0.000478
       140.05    0.000398
df.info()抛出:

构造是通过在for循环内串联,该循环迭代不同的p值:

time = (extracted from a file)
lb = [(p,t) for t in time]
ind = pd.MultiIndex.from_tuples(lb, names=['Pump','Time'])
col = ['p1Up','p1Down']
data = np.concatenate((p1up,p1down),axis=1)
# Build dataframes           
temp = pd.DataFrame(data, index=ind, columns=col)
df = pd.concat([df,temp])    

在一些虚拟数据中,这是有效的

df.loc[idx[1.5,:], :]

如中所述,为两个轴指定索引器以避免歧义是一个好主意,尽管我不确定这是否是问题所在。

不知道是否为时已晚,或者语法已经更改,但是
df.xs(1.5)
可以做到这一点,并且默认情况下会降低所选级别。我认为你甚至不需要对它进行分类。但是它只获取数据,不能设置数据。

如果你发布一个框架示例,这会有所帮助;不确定您认为这种类型的索引会做什么。您呈现的标量不是整数;现在还不清楚如何解释这个嘿,杰夫!我有一系列的时间测量,每个都有不同的强度,用p表示。我试图得到强度=1.5的测量值,它应该返回一个带有时间索引的数据帧。这有帮助吗?显示你的输入帧和你想要的输出显示你是如何构造和df.info()让我们看看它现在是否更清晰…嗨@chrisb,当我尝试这种方式时,我得到了以下错误:
keyror:“多索引切片要求索引是完全lexsorted元组len(2),lexsort depth(0)”
这是正确的答案。您需要完全指定级别索引器,否则这是一个错误;您需要修改.sortlevel(),否则这也是一个错误。以上链接描述了所有这些内容。谢谢@Jeff。是的,sortlevel就是问题所在!快速提问:如何降低1.5级(没有“泵”级的理想输出)?
df.loc[idx[1.5,:], :]