【问题标题】:Include unmatched rows in Python script that merges two files based on one column在基于一列合并两个文件的 Python 脚本中包含不匹配的行
【发布时间】:2018-04-26 10:19:50
【问题描述】:

我有两个 csv 文件,如下所示。

第一个文件:

abTestGroup,platform,countryCode,userId

group_control,ios,GB,aaaaaaaaaaa group_control,ios,GB,aaaaaaaaaaaa

group_control,ios,GB,aaaaaaaaaaa group_control,ios,GB,aaaaaaaaaaaa

group_test,android,GB,ccccccccccc

第二个文件:

dateActivity,productId,cost,userId

2018-03-02,specialpack,0.198,aaaaaaaaaaa

2018-03-03,specialpack,0.498,aaaaaaaaaaa

2018-03-02,specialpack,0.398,bbbbbbbbbbb

2018-03-02,特殊包,0.998,cccccccccccc

在这种情况下,他们有一个共同点,那就是userId

我想合并这些文件并使用 Python (Pandas) 创建父子关系。

我使用了下面的脚本:

import pandas as pd

a = pd.read_csv('PARENT.csv', encoding = "UTF-8", mangle_dupe_cols=True, usecols=['abTestGroup','platform','countryCode','userId'])
b = pd.read_csv("CHILD.csv")
merged = b.merge(a, on='userId', how='inner')

merged = merged.drop_duplicates()

merged.to_csv("final_output.csv", index=False)

为了得到以下输出:

dateActivity,productId,cost,userId,abTestGroup,platform,countryCode

2018-03-02,specialpack,0.198,aaaaaaaaaaa,group_control,ios,GB

2018-03-03,specialpack,0.498,aaaaaaaaaaa,group_control,ios,GB

2018-03-02,specialpack,0.998,ccccccccccc,group_test,android,GB

userId'bbbbbbbbbbb' 不会出现在最终输出中,因为它在两个文件中都不存在。如何包含不匹配的行(不匹配的userIds)并将“其他”值分配给单元格?

【问题讨论】:

标签: python pandas merge


【解决方案1】:

因为您正在执行内部连接,所以只会返回匹配的 userIds。为了返回不匹配的userIds,您可以根据以下语句中的连接顺序进行右/左连接。

merged = b.merge(a, on='userId', how='inner')

如果b 包含bbbbbbbbbbb,您将进行左连接。如果a 包含bbbbbbbbbbb 那么你会做一个正确的加入。

merged = b.merge(a, on='userId', how='left')
merged = b.merge(a, on='userId', how='right')

请参阅下面的联接类型。

【讨论】:

  • 是的。我跳过了那个。我应该多休息一下:P SQL 是这里需要的基本知识。
【解决方案2】:

join 方法适用于您的情况:

a.join(b)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-24
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 2013-07-01
    相关资源
    最近更新 更多