Python 浮动作为多索引中的索引器
我有一个以(p,t)元组的形式具有多索引的数据帧,其中p和t是浮点数。当我试图通过切片(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
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,:], :]