大熊猫:基于多个列合并两个文件

时间:2020-07-27 14:10:14

标签: python pandas csv

我有两个文件,这些文件具有3个公共列-日期,关键字ID,广告组ID。我想根据这些列合并这两个文件,以便对于第一个文件中具有特定日期,keywordid,adgroupid的每一行,如果第二个文件中存在具有相同日期,keywordid,adgroupid的对应行,则附加其余的第二个文件中的值,如果不是,则在其余各列中附加null或-。

第一个文件(此处为df1)具有59,00,000行。第二个文件有大约10,000,000行。我用下面的代码

 import pandas as pd

df1 = pd.read_csv(r"C:\Users\Rakshit Lal\Desktop\QVC Data\psnb_extract_daily\Final\cumulative_adwords_test.csv")
df2 = pd.read_csv(r"C:\Users\Rakshit Lal\Desktop\QVC Data\psnb_extract_daily\Final\Test_psnbfull.csv")

# Merge the two dataframes, using _ID column as key
df3 = pd.merge(df1, df2, on = ['Date', 'KeywordId', 'AdGroupId'])
df3.set_index('Date', inplace = True)

# Write it to a new CSV file
df3.to_csv('CSV3.csv')

# Write it to a new CSV file
df3.to_csv('CSV3.csv')

我的最终文件-csv3仅包含6,05,277行,出于某种原因,它应该包含59,00,000行(如文件1中所示)。我相信我使用合并功能的方式出错。有人可以帮我解决我要去的地方以及应该如何修改吗?

1 个答案:

答案 0 :(得分:1)

如果您不指定合并方式,则需要进行内部联接-但实际上您想进行左联接。您可以使用“左”合并:

df3 = pd.merge(df1, df2, on = ['Date', 'KeywordId', 'AdGroupId'], how = 'left')