多索引切片无法按预期工作(涉及lexsorted元组的错误)

2024-03-29 02:13:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了一个问题,这就是没有意义。我有一个大的pd.DataFrame,我缩小了它的大小,这样我就可以很容易地在一个示例中显示它(称为test1):

>>> print(test1)

value         TIME                                                      \
star             0            1            2            3            4   
0      1952.205873  1952.205873  1952.205873  1952.205873  1952.205873   
1      1952.226307  1952.226307  1952.226307  1952.226307  1952.226307   
2      1952.246740  1952.246740  1952.246740  1952.246740  1952.246740   
3      1952.267174  1952.267174  1952.267174  1952.267174  1952.267174   

value                        CNTS                                \
star             5              0              1              2   
0      1952.205873  575311.432228  534103.079080  179471.239561   
1      1952.226307  571480.854183  533138.021051  187456.451900   
2      1952.246740  555631.798095  530263.846685  203247.734806   
3      1952.267174  553639.056784  527058.335157  210088.229427   

value                                            
star               3             4            5  
0      121884.201457  39003.397835  2089.321993  
1      122796.312201  39552.401359  2810.010142  
2      123500.068304  39158.050385  2652.409086  
3      124357.387418  38881.565235  2721.908129  

我想对它执行切片索引。但是它似乎不起作用。以下是我的尝试:

^{pr2}$

我得到一个错误:

*** KeyError: 'MultiIndex Slicing requires the index to be fully lexsorted tuple len (2), lexsort depth (0)'

这已经不是我第一次犯这个错误或者问这个问题了,但是我还是不知道该怎么解决它,也不知道出了什么问题。在

更令人困惑的是,以下代码似乎可以顺利地工作:

import pandas as pd
import numpy as np 


column_values = ['TIME', 'XPOS']
target = range(0,2)
mindex = pd.MultiIndex.from_product([column_values, target], names=['value', 'target'])
df = pd.DataFrame(columns=mindex, index=range(10), dtype=float)

print(df.loc[:,(slice(None),0)])

我只是不明白发生了什么事,这里出了什么问题。在


Tags: importtargetdataframeindextimevalueas错误
1条回答
网友
1楼 · 发布于 2024-03-29 02:13:06

只需按^{}对列中的MultiIndex排序:

df = df.sort_index(axis=1)

您也可以选中docs - sorting a multiindex。在

示例(列不是lexsorted):

^{pr2}$
df = df.sort_index(axis=1)
print (df.columns.is_lexsorted())
True

print(df.loc[:,(slice(None),0)])
value  TIME XPOS
target    0    0
0       NaN  NaN
1       NaN  NaN
2       NaN  NaN
3       NaN  NaN
4       NaN  NaN
5       NaN  NaN
6       NaN  NaN
7       NaN  NaN
8       NaN  NaN
9       NaN  NaN

相关问题 更多 >