在循环中检索索引时出现问题



我试图运行一个循环,从一组固定的值[125 150 175 200]中找到excel列(让我们说a列)在列a中的每个元素之间的差异。当我找到差异时,我想找到差异的最小值,并需要找到这些值的索引。

代码如下:

Ref = pd.ExcelFile ('Current parametric sweep_reference.xlsx')
print(Ref.sheet_names) 
for Sheet in Ref.sheet_names: 
Ref = pd.read_excel("Current parametric sweep_reference.xlsx",sheet_name=Sheet)
tempdiff = [125, 150, 175, 200] 
numbdiff = len(tempdiff)
values = np.zeros(numbdiff)
Tchipavg=list(Ref["Temperature (degC), Tchipcenter"])
Time =list(Ref["Time (s) (s)"])
index = list(Tchipavg).index(np.max(Tchipavg))
Time = Time[:index]
for j in range(0,numbdiff):
diff =np.array([x-tempdiff[j] for x in Tchipavg[:index-1]])
values[j] = min(abs(diff))
min_index, min_value = min(enumerate(diff), key = operator.itemgetter(1))
print(min_index, min_value)
print(values)

当我打印值时,它确实给出了最小的差值,但我正在努力找到我必须使用的索引来找到另一列的值,让我们说列B。你能指出这里的错误吗?

数据的例子:

df = pd.DataFrame([[0, 95.68 ], [1, 137.04], [2, 149.41], [3 , 158.25 ], [4, 165.28 ], [5 , 127.31 ], [6, 119.80 ], columns=['Time', 'Temp'])

输出应该给出每个δ T (tempdiff)情况下的最小差值的索引,例如,在@Jezrael的回答中,数组中有4个值对应4个tempdiff[125, 150, 175, 200]。输出给出了这4的最小值。相反,我只需要找到相同tempdiff的所有数组的最小值。例如,它可以是这样的:

values = [2.31  0.59 9.72 34.72]
indices = [5    2    4    4]

在pandas中最好避免循环,必要时,因此创建矢量化解决方案。


如果需要用DataFrame中所有有绝对值的值减去list,使用numpy -将值转换为数组,用广播减去,得到绝对值,最后用numpy.argmin得到索引:

Ref = pd.DataFrame([[0, 95.68 ], [1, 137.04], [2, 149.41], [3 , 158.25 ],
[4, 165.28 ], [5 , 127.31 ], [6, 119.80 ]], columns=['Time', 'Temp'])
tempdiff = [125, 150, 175, 200] 
arr = Ref["Temp"].to_numpy()
a = np.abs(arr[:, None] - np.array(tempdiff))
print (a)
[[ 29.32  54.32  79.32 104.32]
[ 12.04  12.96  37.96  62.96]
[ 24.41   0.59  25.59  50.59]
[ 33.25   8.25  16.75  41.75]
[ 40.28  15.28   9.72  34.72]
[  2.31  22.69  47.69  72.69]
[  5.2   30.2   55.2   80.2 ]]
idx = np.argmin(a, axis=0)
print (idx)
[5 2 4 4]
values = a[idx, range(a.shape[1])]
print (values)
[ 2.31  0.59  9.72 34.72]

最新更新