【问题标题】:pandas: merge two files based on multiple columnspandas:基于多列合并两个文件
【发布时间】: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'更好的选择。

标签: python pandas csv


【解决方案1】:

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

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

【讨论】:

猜你喜欢
  • 2013-03-28
  • 1970-01-01
  • 2015-11-07
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多