亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在多對一/多上使用合并

在多對一/多上使用合并

陪伴而非守候 2023-09-12 16:43:29
我下面有兩個數據框,我想合并它們以獲取 df1 上的 ID。但是,我發現通過使用合并,如果名稱超過一個,我無法獲取 ID。df2 具有唯一的名稱,df1 和 df2 的行和列不同。我的代碼如下:df1:   Name Region0  P    Asia1  Q    Eur2  R    Africa3  S    NA4  R    Africa5  R    Africa6  S    NAdf2:   Name  Id0  P     12341  Q     12442  R     1233代碼:x= df1.assign(temp1 = df1.groupby ('Name').cumcount())y= df2.assign(temp1 = df2.groupby ('Name').cumcount())xy= x.merge(y, on=['Name',temp2],how = 'left').drop(columns = ['temp1'])xy 的輸出如下,如何找到那些 NAN 的 Id?   Name Region Id0  P    Asia   12341  Q    Eur    12442  R    Africa NAN3  S    NA     NAN4  R    Africa NAN5  R    Africa NAN6  S    NA     NAN
查看完整描述

3 回答

?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

  1. 您的語法已關閉temp2。首先,你忘記了引號。其次,它應該'temp1'代替temp2.

  2. 您合并了兩列。如果你只在 上合并Id,那么你就不會有NaN值。但是,由于您在 上合并temp1,因此存在一些數據在數據幀中不匹配。第二個數據幀中的列中沒有S值,因此您會期望合并后的值。NameNaNS

  3. 如果您現在的目標是NaN用不同的方法填充這些值,那么您就可以做到。這就是您想要做的,現在只需合并而Id不是Idand temp1。你是這個意思嗎?

x= df1.assign(temp1 = df1.groupby ('Name').cumcount())

y= df2.assign(temp1 = df2.groupby ('Name').cumcount())

xy= x.merge(y, on=['Name','temp1'],how='left').drop('temp1')

xy

Out[1]: 

  Name  Region        Id

0    P    Asia    1234.0

1    Q     Eur    1244.0

2    R  Africa    1233.0

3    S     NaN       NaN

4    R  Africa       NaN

5    R  Africa       NaN

6    S     NaN       NaN


查看完整回答
反對 回復 2023-09-12
?
catspeake

TA貢獻1111條經驗 獲得超0個贊

有什么原因不能使用 pandas merge 嗎?



name_list = ['P','Q','R','S','R','R','S']

country_list = ['Asia','Eur','Africa','NA','Africa','Africa','NA']


df1 = pd.DataFrame({'Name':name_list,'Region':country_list})

df2 = pd.DataFrame({'Name':['P','Q','R'],'Id':[1234,1244,1233]})


result = pd.merge(df1,df2,on='Name',how='left')

print(result)

輸出:


  Name  Region      Id

0    P    Asia  1234.0

1    Q     Eur  1244.0

2    R  Africa  1233.0

3    S      NA     NaN

4    R  Africa  1233.0

5    R  Africa  1233.0

6    S      NA     NaN


查看完整回答
反對 回復 2023-09-12
?
喵喔喔

TA貢獻1735條經驗 獲得超5個贊

你為什么要合并cumcount()?這樣,您只需將它們一對一合并。只需合并:


df1.merge(df2, on='Name', how='outer')

輸出:


  Name  Region      Id

0    P    Asia  1234.0

1    Q     Eur  1244.0

2    R  Africa  1233.0

3    R  Africa  1233.0

4    R  Africa  1233.0

5    S     NaN     NaN

6    S     NaN     NaN


查看完整回答
反對 回復 2023-09-12
  • 3 回答
  • 0 關注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號