微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

比较两个数据框并输出新列

如何解决比较两个数据框并输出新列

我是 Python 初学者。我有两个数据帧,每个数据帧有 5 列,但每个数据帧中只有前两列有匹配的数据。每个数据帧都有不同数量的记录。我想将 df1 中的 A 列与 df2 中的 A 列进行比较,如果它们匹配,则输出D (ownerEmail) 来自 df2。如果 A 列不匹配,则 D 列应该为空。

df1

subscriptionId | displayName | state   | authorization | tenantId
12345          | DEV_SPS     | Enabled | RoleBased     | 938c49a8
67890          | PROD_LINUX  | Enabled | RoleBased     | 0a9cb9ee
11900          | TST_WIN     | Enabled | RoleBased     | e1513511

df2

subscriptionId | SubName    | Connected | ownerEmail         | organization
12345          | DEV_SPS    | Enabled   | john.doe@gmail.com | Marketing
67890          | PROD_LINUX | Enabled   | alex.bre@gmail.com | Sales

期望输出

subscriptionId | displayName | state   | authorization | tenantId | ownerEmail       
123456         | DEV_SPS     | Enabled | RoleBased     | 938c49a8 | john.doe@gmail.com
67890          | PROD_LINUX  | Enabled | RoleBased     | 0a9cb9ee | alex.bre@gmail.com
11900          | TST_WIN     | Enabled | RoleBased     | e1513511 | null

我尝试过类似的方法,但没有奏效。

df1['ownerEmail'] = np.where(df1['subscriptionId'] == df2['subscriptionId'],['ownerEmail'],"")
print(df1)

任何帮助将不胜感激。

谢谢。

解决方法

合并 subscriptionId 列上的数据框并保留来自 df1 (how='left') 的所有记录:

>>> pd.merge(df1.astype({'subscriptionId': str}),df2[['subscriptionId','ownerEmail']].astype({'subscriptionId': str}),on='subscriptionId',how='left')

   subscriptionId displayName    state authorization  tenantId          ownerEmail
0           12345     DEV_SPS  Enabled     RoleBased  938c49a8  john.doe@gmail.com
1           67890  PROD_LINUX  Enabled     RoleBased  0a9cb9ee  alex.bre@gmail.com
2           11900     TST_WIN  Enabled     RoleBased  e1513511                 NaN

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。