在 FOR 循环期间将数据存储在不同的变量中

Storing data in different variable during a FOR loop

我有这个代码:

import math
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

sens_fac = [0.8, 1, 1.2]
A = 13;
B = 5;
C = 7/2;
D = 3*1.2;
par = [A,B,C,D]
data = pd.DataFrame(index=range(len(sens_fac)),columns=range(len(par)))
term1 = pd.DataFrame(index=range(len(sens_fac)),columns=range(len(par)))
term2 = pd.DataFrame(index=range(len(sens_fac)),columns=range(len(par)))
term3 = pd.DataFrame(index=range(len(sens_fac)),columns=range(len(par)))
term4 = pd.DataFrame(index=range(len(sens_fac)),columns=range(len(par)))
sol = []

for i in range(len(par)):
    factors = [1, 1, 1, 1]
    for j in range(len(sens_fac)):
        factors[i] = sens_fac[j]
        print(factors)
        x=25
        t1 = np.log(x)**math.sin(x/(A*factors[0]))
        t2 = (B*factors[1])*math.sqrt(x)
        t3 = (factors[2]*C)**math.exp(1/x)
        t4 = x/(factors[3]*D)*2
        res = t1 + t2 + t3 + t4
        term1[i][j] = t1
        term2[i][j] = t2
        term3[i][j] = t3
        term4[i][j] = t4
        data[i][j] = res

print(term1)
print(term2)
print(term3)
print(term4)

数据帧 term1term2、...、termX 仅在 FOR 循环的特定步骤中有所不同。例如,term1仅在i=0时有不同的值,但在i=1i=2i=3时是相同的。另一方面,term2i=1 时具有不同的值,但在其余迭代中保持相同的值。实际上,您可以在 DataFrame 中看到:

term1 =

          0         1         2         3
0  2.195296  2.995886  2.995886  2.995886
1  2.995886  2.995886  2.995886  2.995886
2  3.216978  2.995886  2.995886  2.995886

term2 =

      0     1     2     3
0  25.0  20.0  25.0  25.0
1  25.0  25.0  25.0  25.0
2  25.0  30.0  25.0  25.0

我想获得这样的东西:

term1 =

          0         
0  2.195296 
1  2.995886  
2  3.216978  

term2 =

      0     
0  20.0
1  25.0
2  30.0

我该怎么做?

您可以删除仅包含一个唯一元素的列(保留包含多个唯一元素的列):

term1.loc[:, term1.nunique().gt(1)].squeeze()

输出:

0    2.195296
1    2.995886
2    3.216978
Name: 0, dtype: float64

注意。您可以使用 squeeze 将唯一匹配列转换为系列,从而能够在操作中使用它们而不必担心索引对齐