簡體   English   中英

Pandas - 添加一個新列,根據其他列值從 arrays 中提取值

[英]Pandas - Add a new column extracting value from arrays based on other column value

我目前無法根據 dataframe 的值嘗試從列表/數組中提取值。

想象一下我有這個數組。 這個數組我可以手動創建,所以我可以以任何我想要的方式放置數字我只是認為這個 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 類型。 這里以重新創建這兩列的代碼為例。 id1 go 從 0 到 6 和 id2 go 從 0 到 3 的數組可能值

data = {'id1': [4, 2, 6, 6], 'id2': [1, 2, 3, 1]}  
df = pd.DataFrame(data) 

我想要做的是在 dataframe df 中添加一個附加列,該列基於數組的值,具體取決於兩列。 因此,例如,數據框的第一行將采用 value[4][1]=40 的值,最終得到這樣的 dataframe

result = {'id1': [4, 2, 6, 6], 'id2': [1, 2, 3, 1], 'matched value': [40, 600, 1000, 40]}  
dfresult = pd.DataFrame(result)

我對實現這一目標的最佳方法有點迷茫。 我想到的是一個非常殘酷的解決方案,我可以做的是獲取多維數組的值並創建一個列表,其中我擁有所有可能的 7*4 組合,在數據框中創建一個新列,即連接兩個 ID,然后根據簡單條件進行直接連接。 這在這種情況下可能會起作用,因為可能的組合很少,但我確信這里有一個學習機會以一種讓我逃避的動態方式使用列表!

您可以使用列表理解來遍歷 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM