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,但如何查询呢?