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

我尝试根据特定列(“文件名”)使用 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() 命令,不适用于第二个/第三个命令。这是我的完整脚本:

https://img2.mukewang.com/64e46cb00001e1e508420472.jpg

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

谢谢你,R


开心每一天1111
浏览 1543回答 1
1回答

沧海一幻觉

也许您可以suffixes在合并中使用参数来控制列名称。来自pandas 合并文档:将 DataFrame df1 和 df2 与附加到任何重叠列的指定左后缀和右后缀合并。在上面,类似:combine = pd.merge(file1, file2, on='filename', how='inner', suffixes=('_file1', '_file2'))其他方面也类似merge。这样你就可以在合并时知道计数来自哪里。例子:# Creating Dataframesdf1 = pd.DataFrame({'col1': ['foo', 'bar', 'baz'], 'count': [1, 2, 3]})df2 = pd.DataFrame({'col1': ['foo', 'bar', 'baz'], 'count': [5, 6, 7]})df1:    col1    count0   foo      11   bar      22   baz      3df2:    col1    count0   foo      51   bar      62   baz      7合并pd.merge(df1, df2, on='col1', suffixes=('_df1', '_df2'))结果:    col1    count_df1   count_df20   foo        1         51   bar        2         62   baz        3         7更新鉴于您有四个数据框,也许您可以尝试:# Combine two of themcombine1 = pd.merge(file1, file2, on='filename', how='inner', suffixes=('_file1', '_file2'))# Combine other twocombine2 = pd.merge(file3, file4, on='filename', how='inner', suffixes=('_file3', '_file4'))# Now combine the combined dataframescombine = pd.merge(combine1, combine2, on='filename', how='inner')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python