Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否可以在没有数据帧的情况下查询多索引本身?_Python_Pandas_Multi Index - Fatal编程技术网

Python 是否可以在没有数据帧的情况下查询多索引本身?

Python 是否可以在没有数据帧的情况下查询多索引本身?,python,pandas,multi-index,Python,Pandas,Multi Index,如果我在多索引实例本身中包含了所有需要的数据,我可以在不将其附加到数据帧的情况下查询它,以避免可能的开销吗 例如: In [664]: import pandas as pd In [665]: index = pd.MultiIndex.from_product([['A', 'B'], [1, 2, 3, 4, 5]]) In [666]: df = pd.DataFrame(index=index) In [667]: df Out[667]: Empty DataFrame Co

如果我在
多索引
实例本身中包含了所有需要的数据,我可以在不将其附加到数据帧的情况下查询它,以避免可能的开销吗

例如:

In [664]: import pandas as pd

In [665]: index = pd.MultiIndex.from_product([['A', 'B'], [1, 2, 3, 4, 5]])

In [666]: df = pd.DataFrame(index=index)

In [667]: df
Out[667]: 
Empty DataFrame
Columns: []
Index: [(A, 1), (A, 2), (A, 3), (A, 4), (A, 5), (B, 1), (B, 2), (B, 3), (B, 4), (B, 5)]

在这种情况下,数据帧本身没有任何数据,所有需要的数据都存储在索引中,因此数据帧是冗余的。同时,我想对数据执行查询。

您可以使用索引方法
get\u loc\u level
这接受一个键值和级别:

In[143]:
index.get_loc_level(2, level=1)
Out[143]: 

(array([False,  True, False, False, False, False,  True, False, False, False], dtype=bool),
 Index(['A', 'B'], dtype='object'))
这将返回一个布尔掩码的元组,对掩码进行索引,并将其传递给索引:

In[144]:
index.get_loc_level(2, level=1)[0]
Out[144]: array([False,  True, False, False, False, False,  True, False, False, False], dtype=bool)
这将返回分层数组中的级别值:

In[145]:
index[index.get_loc_level(2, level=1)[0]]
Out[145]: 
MultiIndex(levels=[['A', 'B'], [1, 2, 3, 4, 5]],
           labels=[[0, 1], [1, 1]])
然后可以调用
.values
返回索引值:

In[146]:
index[index.get_loc_level(2, level=1)[0]].values

Out[146]: array([('A', 2), ('B', 2)], dtype=object)
对于查询来说,这不像数据帧那样对用户友好,但是如果您只想查询索引,那么这是一种方法

如果要查询特定的值,可以使用
获取\u level\u值
然后使用常用的屏蔽运算符:

In[164]:
index[(index.get_level_values(0) == 'A') & (index.get_level_values(1) == 2)]

Out[164]: 
MultiIndex(levels=[['A', 'B'], [1, 2, 3, 4, 5]],
           labels=[[0], [1]])
以下是返回内容的明细:

In[165]:
index.get_level_values(0)

Out[165]: Index(['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'], dtype='object')

In[166]:
index.get_level_values(0) == 'A'

Out[166]: array([ True,  True,  True,  True,  True, False, False, False, False, False], dtype=bool)


In[167]:
index.get_level_values(1) == 2

Out[167]: array([False,  True, False, False, False, False,  True, False, False, False], dtype=bool)

你能添加样本吗?你的问题还不清楚,如果这是你的问题,可能只有一个没有任何数据的索引question@EdChum答案是肯定的,你可以有一个索引对象,它不需要附加到df@EdChum,但如何查询呢?