簡體   English   中英

基於共享列的另一個 dataframe 中的列映射 pandas dataframe 中的新列

[英]Mapping a new column in a pandas dataframe based on columns in another dataframe which share a column

因為它通常適用於 pandas 問題,很難想出一個足夠簡潔的標題,這樣人們就可以知道我在問什么而不用太長,但希望它就足夠了。 我將提供一個簡化示例來說明我正在嘗試做什么,因為我當前的工作數據集非常大。

考慮以下簡單的 dataframe:

df = pd.DataFrame([[0, 5 ],
                   [1, 10],
                   [2, 20],
                   [0, 10],
                   [1, 0 ],
                   [2, 15]], columns = ["ID", "val"])

這將創建以下 dataframe df

   ID  val
0   0    5
1   1   10
2   2   20
3   0   10
4   1    0
5   2   15

我想把這個 dataframe 和 append 作為一個新列,它是另一個 dataframe 的列的映射值,我調用df_map如下所示:

df_map = pd.DataFrame([[0,10],
                       [1,20],
                       [2,30]], columns = ["ID", "new_val"])

因此,最終的 dataframe 應如下所示:

   ID  val  new_val
0   0    5       10
1   1   10       20
2   2   20       30
3   0   10       10
4   1   20       20
5   2   30       30

映射 function 應該簡單地查看df中 ID 列的值,並根據df_map中給出的值分配一個新列

可能這可以通過 pandas 中的.groupby.map函數的組合來完成,但我還沒有弄清楚如何。

任何提示將非常感謝。

您可以使用Series.map

df['new_val'] = df.ID.map(df_map.set_index('ID').squeeze())

Output

   ID  val  new_val
0   0    5       10
1   1   10       20
2   2   20       30
3   0   10       10
4   1    0       20
5   2   15       30

請注意, df_map.set_index('ID').squeeze() 擠壓將 DataFrame 轉換為系列。

暫無
暫無

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

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