如何在Python中使用多索引数据框

问题描述 投票:0回答:1

我有这个数据框,约束如下:

L_model.constraint_b1 = pyo.ConstraintList()
for i in range(len(initial_demand)):
    for k in range(Nb):
        for t in demand.index:
            for e in range(len(bl_inx)):
                if k == bl_inx.inx[e] - 1:
                    L_model.constraint_b1.add(dft[i, k, t] <= dftmax.iloc[t, k, i])

如何重写约束表达式,使用条件语句根据 k 的值从 dftmax 中选择正确的列“i”和行“t”,以便当 k 等于 0 时,约束为:

dft[i, k, t] <= dftmax.iloc[i,0,t]
在哪里
i=0,1,2,3
t=0 to 23

我以前的代码是:

L_model.constraint_b1 = pyo.ConstraintList()
for i in range(len(initial_demand)):
    for k in range(Nb):
        for t in demand.index:
            if k == 0:
                L_model.constraint_b1.add(dft[i, k, t] <= Q1.iloc[t][i])
            elif k == 1:
                L_model.constraint_b1.add(dft[i, k, t] <= Q2.iloc[t][i])
            if k == 2:
                L_model.constraint_b1.add(dft[i, k, t] <= Q3.iloc[t][i])

并且它工作正常,现在我想使用多索引数据帧(dftmax)而不是只有一个索引的 q1、q2、q3。

这是我的数据框:

here dataframe image

python pandas dataframe numpy pyomo
1个回答
0
投票

我不知道您的确切问题是什么,代码是否有效,但没有提供正确的结果,或者是否存在错误。但在我看来,您没有为 MultiIndex 数据框正确使用 .iloc 运算符,这应该会导致如下错误:

IndexingError:索引器太多

如果确实如此,为了使您的代码正常工作,您应该按以下方式使用 .iloc:

dftmax.iloc[row, i]
;其中 row 表示数据帧的行(当 time=1 且 k=1 row=5 时)

否则你可以通过以下方式使用 .loc 运算符:

dftmax.loc[(t,k), column_name]

P.S.:您应该澄清您遇到的确切问题是什么(例如错误或代码未给出您期望的结果),以便能够获得更好的答案

© www.soinside.com 2019 - 2024. All rights reserved.