python - 加入/合并具有相同列名的数据框的微妙问题

标签 python pandas dataframe join merge

所以我有一组主要数据,如下所示:

value_num   code    value_letter
       1    CDX     A
       2    DEF     B
       3    RPQ     C
       4    EEE     D
       5    FFX     E
       6    TRE     F

还有另外两个表,我们称之为map1和map2

song    album_code  song_code
Song1   CDX         GIB
Song2   DEF         FRE
Song3   RPQ         SSS

song    album_code  song_code
Song4   REA         EEE
Song5   VEY         FFX
Song6   LFM         TRE

我想将主表与map1连接,其中album_code在代码上连接。然后我想将map2加入到这个新表上,其中song_code在代码上加入。

理想情况下,最终结果如下所示:

value_num   code    value_letter    song    album_code  song_code
1           CDX     A               Song1          CDX  GIB
2           DEF     B               Song2          DEF  FRE
3           RPQ     C               Song3          RPQ  SSS
4           EEE     D               Song4          REA  EEE
5           FFX     E               Song5          VEY  FFX
6           TRE     F               Song6          LFM  TRE

相反,输出总共有 9 个列名称:value_num、code、value_letter、song_x、album_code_x、song_code_x、song_y、album_code_y 和 Song_code_y。 map1 中的值位于 x 列下方,song2 值位于 y 列下方。

我尝试了几种不同的合并和连接方法。我不在乎该解决方案是否是一个复杂的解决方法,但它不能是该数据的重新格式化。

最佳答案

使用combine_first进行两次合并

r1=df.merge(df1,left_on='code',right_on='album_code',how='left')
r2=df.merge(df2,left_on='code',right_on='song_code',how='left')   
r1.combine_first(r2)
Out[547]: 
   value_num code value_letter   song album_code song_code
0          1  CDX            A  Song1        CDX       GIB
1          2  DEF            B  Song2        DEF       FRE
2          3  RPQ            C  Song3        RPQ       SSS
3          4  EEE            D  Song4        REA       EEE
4          5  FFX            E  Song5        VEY       FFX
5          6  TRE            F  Song6        LFM       TRE

关于python - 加入/合并具有相同列名的数据框的微妙问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51550255/

相关文章:

python - 我的嵌套 For 循环运行 "faster"比内联 For 循环

python - 使用列表值作为后续键访问字典值

python - 从索引值创建列

python - Pandas - 多线图

r - 从 R 中的 for 循环写入数据帧

pandas - 如果另一列中的值较差,则汇总一列(不使用 for 循环)

python - 在 tkinter 中关闭窗口之前执行某个命令

python - 是否可以将 Black 作为 API 调用?

Python Pandas 如何将一个数据帧中的日期与另一个数据帧中的日期进行比较?

python - 如何组合数据框的月份和年份列以形成时间序列数据