在基于一列合并两个文件的Python脚本中包含不匹配的行

2024-10-01 13:35:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个csv文件如下所示

第一个文件:

abTestGroup,platform,countryCode,userId

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

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

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,specialpack,0.998,ccccccccccc

在这种情况下,它们有一个共同点,那就是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'不会出现在最终输出中,因为它不存在于两个文件中。如何包含不匹配的行(unmatcheduserIds)并将“Other”值赋给单元格


Tags: 文件csvgroupmergedcontroliospdcountrycode
2条回答

join方法适用于您的案例:

a.join(b)

因为您正在执行内部联接,所以只返回匹配的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')

请参阅下面的连接类型

The difference between joins

相关问题 更多 >