最基本的我有以下資料框:
a = {'possibility' : np.array([1,2,3])}
b = {'possibility' : np.array([4,5,6])}
df = pd.DataFrame([a,b])
這給了我一個大小為 2x1 的資料框:像這樣:
row 1: np.array([1,2,3])
row 2: np.array([4,5,6])
我有另一個長度為 2 的向量。像這樣:
[1,2]
這些代表我想要的每一行的索引。
因此,如果我有 [1,2],我想要:從第 1 行開始:2,從第 2 行開始:6。理想情況下,我的輸出是長度為 2 的向量形式的 [2,6]。
這可能嗎?我可以輕松地運行一個 for 回圈,但我正在尋找 FAST 方法,最好是向量方法,因為它已經在 pandas/numpy 中了。
對于實際用例的近似值,我希望在 300k-400k 行范圍內進行這項作業。并且需要在優化問題中運行它(因此是快速部分)
uj5u.com熱心網友回復:
您可以轉換為多維 numpy 陣列和take_along_axis:
v = np.array([1,2])
a = np.vstack(df['possibility'])
np.take_along_axis(a.T, v[None], axis=0)[0]
輸出:array([2, 6])
uj5u.com熱心網友回復:
您可以enumerate在串列上使用創建元組串列:(idx將用于索引MultiIndex 系列)。然后從“可能性”列創建一個DataFrame,stack它;這將創建一個 MultiIndex 系列。用于idx過濾想要的資料。
idx = [*enumerate([1,2])]
out = pd.DataFrame(df['possibility'].tolist()).stack()[idx].to_numpy()
輸出:
array([2, 6])
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/425823.html
