我有一系列數字:
arr = np.array([1147.8, 1067.2, 957.6, 826.4])
還有一個 pandas DF,有兩列“右”和“左”,描述一個范圍,而每個范圍都包含在 DF 中的下一個范圍內:
right left
0 1090 1159.5
1 1080 1169.5
2 1057.5 1191.99
對于 arr 中的每個數字,我想獲取包含它的第一個范圍的索引。對于第一個數字 (1147.8),它將為 0,因為它在范圍 (1090, 1159.5) 內。對于第二個,它將是 2,因為 (1057.5, 1191.99) 中的 1067.2 但不在 (1080, 1169.5) 中(當然還有其他先前的范圍)
我可以為 arr 中的每個數字迭代 DF,但我正在尋找一種更智能的方法。謝謝
uj5u.com熱心網友回復:
arr 和 df 之間的全叉積,然后過濾,然后選擇第一個范圍。對于少量資料,這是可以的。理想情況下,您會為所有 2000 個 arr 一次性完成所有操作。之后的 DataFrame 有大約 200 萬行.merge(df_arr, how='cross'),這種方法在這種情況下仍然有效。
df_arr = pd.DataFrame({"arr": arr,
"id_arr": range(len(arr))})
(df.reset_index()
.merge(df_arr, how='cross')
.query("right < arr < left")
.groupby("id_arr")
.first())
產生:
index right left arr
id_arr
0 0 1090.0 1159.50 1147.8
1 2 1057.5 1191.99 1067.2
index最窄區間的指數在哪里。
id_arr用于分組,以防您在 arr 中有重復值并且您希望結果中有重復值。如果這不相關,也可以直接按 arr 分組。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/441974.html
上一篇:用python找到3維向量的大小
下一篇:Numpy-平面陣列的串列串列
