切片 pandas' MultiIndex DataFrame
Slice pandas' MultiIndex DataFrame
为了跟踪参数 运行 中的所有模拟结果,我在 pandas 中创建了一个名为 dfParRun 的 MultIndex DataFrame,如下所示:
import pandas as pd
import numpy as np
import itertools
limOpt = [0.1,1,10]
reimbOpt = ['Cash','Time']
xOpt = [0.1, .02, .03, .04, .05, .06, .07, .08]
zOpt = [1,5n10]
arrays = [limOpt, reimbOpt, xOpt, zOpt]
parameters = list(itertools.product(*arrays))
nPar = len(parameters)
variables = ['X', 'Y', 'Z']
nVar = len(variables)
index = pd.MultiIndex.from_tuples(parameters, names=['lim', 'reimb', 'xMax', 'zMax'])
dfParRun = pd.DataFrame(np.random.rand((nPar, nVar)), index=index, columns=variables)
为了分析我的参数运行,我想对这个数据帧进行切片,但这似乎是一种负担。例如,我希望 xMax 的所有结果都在 0.5 以上,并且 lim 等于 10。目前,我找到的唯一可行方法是:
df = dfParRun.reset_index()
df.loc[(df.xMax>0.5) & (df.lim==10)]
不知道有没有不重置DataFrame索引的方法?
选项 1
使用 pd.IndexSlice
警告:需要 sort_index
dfParRun.sort_index().loc[pd.IndexSlice[10, :, .0500001:, :]]
选项 2
在 reset_index
之后使用你的 df
df.query('xMax > 0.05 & lim == 10')
设置
import pandas as pd
import numpy as np
import itertools
limOpt = [0.1,1,10]
reimbOpt = ['Cash','Time']
xOpt = [0.1, .02, .03, .04, .05, .06, .07, .08]
zOpt = [1, 5, 10]
arrays = [limOpt, reimbOpt, xOpt, zOpt]
parameters = list(itertools.product(*arrays))
nPar = len(parameters)
variables = ['X', 'Y', 'Z']
nVar = len(variables)
index = pd.MultiIndex.from_tuples(parameters, names=['lim', 'reimb', 'xMax', 'zMax'])
dfParRun = pd.DataFrame(np.random.rand(*(nPar, nVar)), index=index, columns=variables)
df = dfParRun.reset_index()
为了跟踪参数 运行 中的所有模拟结果,我在 pandas 中创建了一个名为 dfParRun 的 MultIndex DataFrame,如下所示:
import pandas as pd
import numpy as np
import itertools
limOpt = [0.1,1,10]
reimbOpt = ['Cash','Time']
xOpt = [0.1, .02, .03, .04, .05, .06, .07, .08]
zOpt = [1,5n10]
arrays = [limOpt, reimbOpt, xOpt, zOpt]
parameters = list(itertools.product(*arrays))
nPar = len(parameters)
variables = ['X', 'Y', 'Z']
nVar = len(variables)
index = pd.MultiIndex.from_tuples(parameters, names=['lim', 'reimb', 'xMax', 'zMax'])
dfParRun = pd.DataFrame(np.random.rand((nPar, nVar)), index=index, columns=variables)
为了分析我的参数运行,我想对这个数据帧进行切片,但这似乎是一种负担。例如,我希望 xMax 的所有结果都在 0.5 以上,并且 lim 等于 10。目前,我找到的唯一可行方法是:
df = dfParRun.reset_index()
df.loc[(df.xMax>0.5) & (df.lim==10)]
不知道有没有不重置DataFrame索引的方法?
选项 1
使用 pd.IndexSlice
警告:需要 sort_index
dfParRun.sort_index().loc[pd.IndexSlice[10, :, .0500001:, :]]
选项 2
在 reset_index
df
df.query('xMax > 0.05 & lim == 10')
设置
import pandas as pd
import numpy as np
import itertools
limOpt = [0.1,1,10]
reimbOpt = ['Cash','Time']
xOpt = [0.1, .02, .03, .04, .05, .06, .07, .08]
zOpt = [1, 5, 10]
arrays = [limOpt, reimbOpt, xOpt, zOpt]
parameters = list(itertools.product(*arrays))
nPar = len(parameters)
variables = ['X', 'Y', 'Z']
nVar = len(variables)
index = pd.MultiIndex.from_tuples(parameters, names=['lim', 'reimb', 'xMax', 'zMax'])
dfParRun = pd.DataFrame(np.random.rand(*(nPar, nVar)), index=index, columns=variables)
df = dfParRun.reset_index()