在 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)
数据帧 term1
、term2
、...、termX
仅在 FOR 循环的特定步骤中有所不同。例如,term1
仅在i=0
时有不同的值,但在i=1
、i=2
或i=3
时是相同的。另一方面,term2
在 i=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
将唯一匹配列转换为系列,从而能够在操作中使用它们而不必担心索引对齐
我有这个代码:
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)
数据帧 term1
、term2
、...、termX
仅在 FOR 循环的特定步骤中有所不同。例如,term1
仅在i=0
时有不同的值,但在i=1
、i=2
或i=3
时是相同的。另一方面,term2
在 i=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
将唯一匹配列转换为系列,从而能够在操作中使用它们而不必担心索引对齐