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

Python 熊猫:基于多列合并两个文件,python,pandas,csv,Python,Pandas,Csv,我有两个文件,它们有3个公共列-日期、关键字ID、AdGroupId。我想基于这些列合并这两个文件,这样对于第一个文件中具有特定日期、关键字ID、adgroupid的每一行,如果第二个文件中有具有相同日期、关键字ID、adgroupid的对应行,然后在第二个文件中追加其余的值,如果不追加,则在其余列中追加null或- 第一个文件(这里的df1)有5900000行。第二个文件大约有100000行。我使用了下面的代码 import pandas as pd df1 = pd.read_csv(r

我有两个文件,它们有3个公共列-日期、关键字ID、AdGroupId。我想基于这些列合并这两个文件,这样对于第一个文件中具有特定日期、关键字ID、adgroupid的每一行,如果第二个文件中有具有相同日期、关键字ID、adgroupid的对应行,然后在第二个文件中追加其余的值,如果不追加,则在其余列中追加null或-

第一个文件(这里的df1)有5900000行。第二个文件大约有100000行。我使用了下面的代码

 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只包含605277行,因为某些原因,它应该包含5900000行(如文件1所示)。我相信我在使用合并函数时犯了一个错误。有人能帮我解决哪里出了问题,我应该修改什么吗?

如果你不指定如何合并,它需要一个内部联接,但实际上你想做左联接。您可以使用“左”合并:

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

也许您想将
how
关键字参数设置为
'outer'
?是否保证df2中的每一行与df1中的一行或多行匹配?这就是我如何理解你的问题,但它并不完全清楚。有关更多信息,请通读。这些数字可能会让你知道在这种情况下应该使用什么。对于df2中的任何特定行,df1中可能没有对应的行。但我只想让df1中的所有行在我的最终csv中保持完整,如果df1中有相应的条目,然后为这些行添加值,如果没有,那么只需将这些行的额外列留空或为空,那么与
'outer'
相比,
'left'
确实是更好的选择。我会尝试一下,让您知道它是否有效!谢谢。你知道我应该包括哪些内容来按日期列(降序)对行进行排序吗?这可以帮助你: