對 Python 來說相當陌生,我目前正試圖根據資料幀的值從串列/陣列中提取一個值。
想象一下我有這個陣列。這個陣列我可以手動創建,所以我可以以任何我想要的方式放置數字我只是認為這個 python 串列是最好的,但我可以在這里做任何事情
value = [[30, 120, 600, 3000], [15, 60, 300, 1500], [30, 120, 600, 3000], [10, 40, 200, 1000],[10, 40, 200, 1000], [10, 40, 200, 1000], [10, 40, 200, 1000], [5, 20, 100, 500]]
我還有一個來自更大/動態處理的資料框,其中我有兩列,它們是 int 型別。這里以重新創建這 2 列的代碼為例。id1 的陣列可能值從 0 到 6,id2 從 0 到 3
data = {'id1': [4, 2, 6, 6], 'id2': [1, 2, 3, 1]}
df = pd.DataFrame(data)
我想要做的是在資料幀 df 中添加一個附加列,該列基于陣列的值,具體取決于兩列。因此,例如資料幀的第一行將采用 value[4][1]=40 的值來結束這樣的資料幀
result = {'id1': [4, 2, 6, 6], 'id2': [1, 2, 3, 1], 'matched value': [40, 600, 1000, 40]}
dfresult = pd.DataFrame(result)
我對實作這一目標的最佳方法有點迷茫。我想到的是一個非常殘酷的解決方案,我可以做的是獲取多維陣列的值,然后創建一個串列,其中包含所有可能的 7*4 組合,在資料框中創建一個新列兩個id的連接,然后根據簡單的條件進行直接連接。這在這種情況下可能會起作用,因為可能的組合很少,但我確信這里有一個學習機會,可以以一種動態的方式使用串列,這讓我無法理解!謝謝!
uj5u.com熱心網友回復:
您可以使用串列推導來迭代 id 對并檢索每對的相應值
df['matched_val'] = [value[i][j] for i, j in zip(df['id1'], df['id2'])]
或者使用 numpy 索引的更好解決方案,但僅當內部子串列value長度相等時才適用:
df['matched_val'] = np.array(value)[df['id1'], df['id2']]
結果
id1 id2 matched_val
0 4 1 40
1 2 2 600
2 6 3 1000
3 6 1 40
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/448416.html
上一篇:python操作資料框
