【发布时间】:2020-07-27 14:10:14
【问题描述】:
我有两个文件,它们有 3 个公共列 - 日期、关键字 ID、广告组 ID。我想根据这些列合并这两个文件,这样对于第一个文件中具有特定日期、keywordid、adgroupid 的每一行,如果第二个文件中存在具有相同日期、keywordid、adgroupid 的相应行,则附加其余的第二个文件中存在的值,如果不只是在其余列中附加 null 或 -。
第一个文件(此处为 df1)有 59,00,000 行。第二个文件有大约 10,00,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 中所示)。我相信我使用合并功能的方式出错了。有人可以帮我解决我哪里出错以及我应该修改什么吗?
【问题讨论】:
-
也许您想将
how关键字参数设置为'outer'? -
是否保证df2中的每一行都匹配df1中的一行或多行?这就是我阅读您的问题的方式,但并不完全清楚。
-
欲了解更多信息,请阅读pandas.pydata.org/pandas-docs/stable/user_guide/merging.html。这些数字可能会让您了解在这种情况下使用什么。
-
没有。对于 df2 中的任何特定行,df1 中可能没有相应的行。但我想要的只是在我的最终 csv 中保留 df1 中的所有行,如果 df1 中有相应的条目,则添加这些行的值,如果没有,则将这些行的额外列留空或空
-
那么
'left'确实是比'outer'更好的选择。