我需要创建一个数据结构,以允许通过一个float数组进行索引。元组的每个维度代表一个参数。每个参数都跨越一个连续的范围,为了能够执行我的工作,我将该范围分为几类。
然后,我想创建一个具有MultiIndex的数据框,该索引的每个维都引用具有已定义类别的参数
import pandas as pd
import numpy as np
index = pd.interval_range(start=0, end=10, periods = 5, closed='both')
index2 = pd.interval_range(start=20, end=30, periods = 3, closed='both')
index3 = pd.MultiIndex.from_product([index,index2])
dataStructure = pd.DataFrame(np.zeros((5*3,1)), index = index3)
print(Qhat)
我检查了interval_range是否为我提供了必要的方法,例如
index.get_loc(2.5)
将为我提供正确的答案。但是我不能用数据框或multiIndex扩展它
index3.get_loc((2.5,21))
不起作用。任何想法 ?我设法以某种方式使昨天的工作正常进行,因此99%的我相信有一种简单的方法可以使该工作正常进行。但是我的Jupyter笔记本在云中,服务器崩溃了,笔记本丢失了。我一夜之间变得哑了。
答案 0 :(得分:1)
我认为尚未实现按元组选择,可能的解决方案是分别用Index.get_level_values
获取每个级别的位置,按intersect1d
获取交集,最后按iloc
选择:
idx1 = df.index.get_level_values(0).get_loc(2.5)
idx2 = df.index.get_level_values(1).get_loc(21)
df1 = df.iloc[np.intersect1d(idx1, idx2)]
print (df1)
0
[2, 4] [20.0, 23.333333333333332] 0.0