簡體   English   中英

如果值相等,則將列值從 dataframe 復制到另一個

[英]Copy column value from a dataframe to another if values are equal

我有兩個這樣的數據框(這是一個例子,因為我的數據框很復雜):

lst_p = [['2', 0], ['3', 1], ['4', 0], ['5', 0]]  
df_p = pd.DataFrame(lst_p, columns =['id', 'redness'])



lst_c = [['apple', 2], ['orange', 2], ['banana', 3], ['kiwi', 4], ['cherry', 5]]  
df_c = `pd.DataFrame(lst_c, columns =['name', 'id'])`

我的兩個數據幀的長度不同。

正如您在我的第二個 df_c 中所見,某些“id”出現了 2 次。 (對於 id=2)

我想在我的df_c中創建一個新列,如果'id'來自我的 df_c == 'id' 從我的df_p復制我的 df_p 的值'redness' of my df_p ' 。

不知道說的清楚不。。。

多謝 !!!

使用可以簡單地嘗試將 df_p 兩列轉換為字典 any 使用 lambda 查找每個 id 的紅色,並創建新列。

代碼:

df_c['redness'] = df_c['id'].apply(lambda x: pd.Series(df_p.redness.values,index=df_p.id).to_dict()[str(x)])
df_c

一個簡單的合並就可以解決問題:

您遇到的一個問題是,在一個 dataframe 中,您的idstring類型,
在另一個 dataframe 中, idint類型。

解決這個問題的最簡單方法是在 merge 之前將字符串轉換為 int ,
並在需要時轉換回來。

代碼:

df_p.id = df_p.id.astype(int)
df_c = pd.merge(df_c, df_p, on=['id'], how='left')

print(df_c)

Output:

df_c

暫無
暫無

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

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