猿问

在多对一/多上使用合并

我下面有两个数据框,我想合并它们以获取 df1 上的 ID。但是,我发现通过使用合并,如果名称超过一个,我无法获取 ID。df2 具有唯一的名称,df1 和 df2 的行和列不同。我的代码如下:


df1:


   Name Region

0  P    Asia

1  Q    Eur

2  R    Africa

3  S    NA

4  R    Africa

5  R    Africa

6  S    NA

df2:


   Name  Id

0  P     1234

1  Q     1244

2  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 Id

0  P    Asia   1234

1  Q    Eur    1244

2  R    Africa NAN

3  S    NA     NAN

4  R    Africa NAN

5  R    Africa NAN

6  S    NA     NAN


陪伴而非守候
浏览 225回答 3
3回答

尚方宝剑之说

您的语法已关闭temp2。首先,你忘记了引号。其次,它应该'temp1'代替temp2.您合并了两列。如果你只在 上合并Id,那么你就不会有NaN值。但是,由于您在 上合并temp1,因此存在一些数据在数据帧中不匹配。第二个数据帧中的列中没有S值,因此您会期望合并后的值。NameNaNS如果您现在的目标是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')xyOut[1]:   Name  Region        Id0    P    Asia    1234.01    Q     Eur    1244.02    R  Africa    1233.03    S     NaN       NaN4    R  Africa       NaN5    R  Africa       NaN6    S     NaN       NaN

catspeake

有什么原因不能使用 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      Id0    P    Asia  1234.01    Q     Eur  1244.02    R  Africa  1233.03    S      NA     NaN4    R  Africa  1233.05    R  Africa  1233.06    S      NA     NaN

喵喔喔

你为什么要合并cumcount()?这样,您只需将它们一对一合并。只需合并:df1.merge(df2, on='Name', how='outer')输出:  Name  Region      Id0    P    Asia  1234.01    Q     Eur  1244.02    R  Africa  1233.03    R  Africa  1233.04    R  Africa  1233.05    S     NaN     NaN6    S     NaN     NaN
随时随地看视频慕课网APP

相关分类

Python
我要回答