如果同一列在另一个数据框中,熊猫会从一个数据框中获取特定列

对于我的生活,我无法弄清楚如何实施以下解决方案:


假设我有一个名为df1的数据框


   ID  Name  Gender

   0   Bill    M

   1   Adam    M

   2   Kat     F

   1   Adam    M

然后我有另一个名为df2的数据框


   ID  Name   Age

   5as   Sam  34

   1as   Adam 64

   2as   Kat  50

我要做的就是检查来自df1的ID是否在df2的ID中,如果是,请抓住相应的Age列并将其附加到df1。


理想解决方案:


   ID  Name  Gender  Age

   0   Bill    M

   1   Adam    M     64

   2   Kat     F     50

   1   Adam    M     64

我已经实现了以下解决方案,起初我认为它有效,但意识到它在 df 末尾缺少匹配很多值。不确定是因为我写的内容还是我的 CSV 文件太大。


y_list = df2.ID.dropna().unique()


for x in df1.ID.unique():

   if x in y_list:

        df1.loc[df1.ID == x, 'Age'] = df2.Age

任何帮助表示赞赏!


缥缈止盈
浏览 80回答 2
2回答

蛊毒传说

这是你可以做的df3 = df1.join(df2.set_index('ID'), on='ID', lsuffix='_left')如果您想加入“ID”列。但是,如果您希望加入“姓名”,您可以更改 on=“姓名”。另一种选择是使用合并,df1.merge(df2, on='Name', how='left')输出    ID  Name_x  Gender  Name_y  Age0   0   Bill    M   NaN NaN1   1   Adam    M   Adam    64.02   2   Kat F   Kat 50.03   1   Adam    M   Adam    64.0这是使用时的输出caller.set_index('ID').join(other.set_index('ID'), lsuffix='_left')    Name_left   Gender  Name    AgeID              0   Bill    M   NaN NaN1   Adam    M   Adam    64.01   Adam    M   Adam    64.02   Kat F   Kat 50.0

郎朗坤

您可以执行以下操作name_age_dict = dict(zip(df2['Name'], df2['Age']))df1['Age'] = df1['Name'].map(name_age_dict).fillna('')另一种方法df1['Age'] = df1['Name'].map(df2.set_index('Name')['Age']).fillna('')输出    ID  Name    Gender  Age0   0   Bill    M   1   1   Adam    M       642   2   Kat     F       503   1   Adam    M       64
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python