使用 pd.merge() 合并两个以上的数据帧

Posted

技术标签:

【中文标题】使用 pd.merge() 合并两个以上的数据帧【英文标题】:Merging MORE THAN two dataframes with pd.merge() 【发布时间】:2021-01-06 20:10:51 【问题描述】:

我正在尝试基于特定列(“文件名”)使用 pd.merge() 合并 4 个 csv 文件。我读到合并仅适用于两个数据帧,而是尝试在连续的步骤中合并前两个,然后是第三个,然后是第四个。这最终奏效了,代码如下:

combine = pd.merge(file1, file2, on='filename', how='inner')
combine1 = pd.merge(combine, file3, on='filename', how='inner')
combine2 = pd.merge(combine1, file4, on='filename', how='inner')

产生以下结果:

filename,  count_x,  count_y,  count_x,  count_y
M116_13331848_13109013422677.jpg,  21,  11,  18,  16
M116_13331848_13109013387678.jpg,  21,  13,  13,  18
M116_13331848_13109013329679.jpg,  19,  15,  16,  15
M116_13331848_13109013424677.jpg,  18,  13,  16,  15
M116_13331848_13109013385678.jpg,  17,  12,  15,  13

如您所见,该过程在列上生成了令人困惑的标题。因此,我尝试使用 suffixes 参数来控制这些标头。但是,这只适用于第一个 pd.merge() 命令,而不适用于第二个/第三个。这是我的完整脚本:

如何将我自己的标题归因于组合 df 中的每一列?

谢谢, 回复

【问题讨论】:

您能否在流程之前包含一个标头示例? 如果您尝试合并的 2 个 DF 中有相同的列,为避免重复该函数,请创建 _x 和 _y @RoccoFortuna 我添加了整个脚本的图像。但是四个原始数据帧(antns、df1、df2、df3)都只有两列。一个带有标题“文件名”,另一个带有标题“计数”。我正在尝试合并“文件名”列上的四个 dfs,以比较它们之间的“计数”列。谢谢! R 【参考方案1】:

也许你可以在合并中使用参数suffixes 来控制列名。来自pandas merge documentation:

合并具有指定左右后缀的数据帧 df1 和 df2 附加到任何重叠的列。

在上面,类似:

combine = pd.merge(file1, file2, on='filename', how='inner', suffixes=('_file1', '_file2'))

在其他merge 上也类似。这样您就可以在合并时知道计数的来源。

例子:

# Creating Dataframes
df1 = pd.DataFrame('col1': ['foo', 'bar', 'baz'], 'count': [1, 2, 3])
df2 = pd.DataFrame('col1': ['foo', 'bar', 'baz'], 'count': [5, 6, 7])

df1:

    col1    count
0   foo      1
1   bar      2
2   baz      3

df2:

    col1    count
0   foo      5
1   bar      6
2   baz      7

合并

pd.merge(df1, df2, on='col1', suffixes=('_df1', '_df2'))

结果:

    col1    count_df1   count_df2
0   foo        1         5
1   bar        2         6
2   baz        3         7

更新

鉴于您有四个数据框,也许您可​​以尝试:

# Combine two of them
combine1 = pd.merge(file1, file2, on='filename', how='inner', suffixes=('_file1', '_file2'))

# Combine other two
combine2 = pd.merge(file3, file4, on='filename', how='inner', suffixes=('_file3', '_file4'))

# Now combine the combined dataframes
combine = pd.merge(combine1, combine2, on='filename', how='inner')

【讨论】:

谢谢。但是,此后缀方法适用于两个数据帧,而我有四个。正如我在最初的问题中所说, pd.merge() 一次只适用于两个数据帧,所以我不得不分阶段合并它们。我已经为前 2 个数据帧实现了后缀参数,这很有效。但是,当我尝试在其他两个合并命令上实现它时,我会收到各种错误消息,具体取决于我实现参数的方式。我在上面的问题中添加了一张图片,以便您可以完整地查看(短)脚本。 @学生 你可以试试我添加的更新看看它是否有效? 太棒了,这工作得很好。谢谢你所有的帮助伙伴! @学生

以上是关于使用 pd.merge() 合并两个以上的数据帧的主要内容,如果未能解决你的问题,请参考以下文章

pd.merge :尝试合并具有相同列名的数据框

有没有办法在行和列索引上合并熊猫数据框?

合并熊猫中的两个数据框

列出两列时合并两个 Pandas 数据框

pandas的merge方法

合并两个数据框而不重复熊猫