使用 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() 合并两个以上的数据帧的主要内容,如果未能解决你的问题,请参考以下文章