我正在嘗試運行一個回圈,以找出 A 列中每個元素的一組固定值 [125 150 175 200] 中的 excel 列(假設為 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'])
輸出應該給出每個 delta T (tempdiff) 情況下最小差異的索引,例如,在@Jezrael 的回答中,4 個 tempdiff [125, 150, 175, 200] 的陣列中有 4 個值。輸出給出了這 4 個中的最小值。相反,我只需要找到相同 tempdiff 的所有陣列的最小值。例如,它會是這樣的:
values = [2.31 0.59 9.72 34.72]
indices = [5 2 4 4]
uj5u.com熱心網友回復:
在熊貓中最好避免回圈,如有必要,因此創建了矢量化解決方案。
如果需要用絕對值減去list所有值DataFrame并獲取索引,請使用 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]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/322014.html
