how to join two dataframe with a key and duplicate the matching value to fill in












0














how can I join two data frames by column "ID" and fill the blanks with the matching value. Since it is complicated to explain, here is my code to show what I want for the result.



import pandas as pd    
df = pd.DataFrame({'id': [1, 1, 1, 2, 2, 3, 4, 4, 4], 'col1': [3, 0, -1, 3.4, 4, 5, 6, 7, 8]})
df2 = pd.DataFrame({'id': [1, 2, 3, 4, 5, 6, 7, 8, 9], 'col2': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']})


Now, I want to join these two dataframes with "id" and duplicate the values in col2 to fill in the blank col2 column after join.



please help me. Thanks










share|improve this question
























  • What is expected output?
    – jezrael
    Nov 13 at 7:33
















0














how can I join two data frames by column "ID" and fill the blanks with the matching value. Since it is complicated to explain, here is my code to show what I want for the result.



import pandas as pd    
df = pd.DataFrame({'id': [1, 1, 1, 2, 2, 3, 4, 4, 4], 'col1': [3, 0, -1, 3.4, 4, 5, 6, 7, 8]})
df2 = pd.DataFrame({'id': [1, 2, 3, 4, 5, 6, 7, 8, 9], 'col2': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']})


Now, I want to join these two dataframes with "id" and duplicate the values in col2 to fill in the blank col2 column after join.



please help me. Thanks










share|improve this question
























  • What is expected output?
    – jezrael
    Nov 13 at 7:33














0












0








0







how can I join two data frames by column "ID" and fill the blanks with the matching value. Since it is complicated to explain, here is my code to show what I want for the result.



import pandas as pd    
df = pd.DataFrame({'id': [1, 1, 1, 2, 2, 3, 4, 4, 4], 'col1': [3, 0, -1, 3.4, 4, 5, 6, 7, 8]})
df2 = pd.DataFrame({'id': [1, 2, 3, 4, 5, 6, 7, 8, 9], 'col2': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']})


Now, I want to join these two dataframes with "id" and duplicate the values in col2 to fill in the blank col2 column after join.



please help me. Thanks










share|improve this question















how can I join two data frames by column "ID" and fill the blanks with the matching value. Since it is complicated to explain, here is my code to show what I want for the result.



import pandas as pd    
df = pd.DataFrame({'id': [1, 1, 1, 2, 2, 3, 4, 4, 4], 'col1': [3, 0, -1, 3.4, 4, 5, 6, 7, 8]})
df2 = pd.DataFrame({'id': [1, 2, 3, 4, 5, 6, 7, 8, 9], 'col2': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']})


Now, I want to join these two dataframes with "id" and duplicate the values in col2 to fill in the blank col2 column after join.



please help me. Thanks







python pandas dataframe join






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 21 at 13:38

























asked Nov 13 at 7:32









Yun Tae Hwang

15711




15711












  • What is expected output?
    – jezrael
    Nov 13 at 7:33


















  • What is expected output?
    – jezrael
    Nov 13 at 7:33
















What is expected output?
– jezrael
Nov 13 at 7:33




What is expected output?
– jezrael
Nov 13 at 7:33












3 Answers
3






active

oldest

votes


















1














Are you looking for merge?



df.merge(df2, on='id')

id col1 col2
0 1 3.0 A
1 1 0.0 A
2 1 -1.0 A
3 2 3.4 B
4 2 4.0 B
5 3 5.0 C
6 4 6.0 D
7 4 7.0 D
8 4 8.0 D





share|improve this answer





















  • Simplest and easiest way to do merging
    – id101112
    Nov 21 at 15:05



















0














I believe you need map:



df['col2'] = df['id'].map(df2.set_index('id')['col2'])


Or left join with merge:



df = df.merge(df2, on='id', how='left')




print (df)
id col1 col2
0 1 3.0 A
1 1 0.0 A
2 1 -1.0 A
3 2 3.4 B
4 2 4.0 B
5 3 5.0 C
6 4 6.0 D
7 4 7.0 D
8 4 8.0 D





share|improve this answer





























    0














    If you outer join them:



    df3 = pd.merge(df, df2, on='id', how='outer')


    Then you can replace NaN values in col1 by corresponding values in col2:



    df3.loc[df3.col1.isnull(), 'col1'] = df3.loc[df3.col1.isnull(), 'col2']
    print(df3)


    Output:



        id col1 col2
    0 1 3 A
    1 1 0 A
    2 1 -1 A
    3 2 3.4 B
    4 2 4 B
    5 3 5 C
    6 4 6 D
    7 4 7 D
    8 4 8 D
    9 5 E E
    10 6 F F
    11 7 G G
    12 8 H H
    13 9 I I





    share|improve this answer





















      Your Answer






      StackExchange.ifUsing("editor", function () {
      StackExchange.using("externalEditor", function () {
      StackExchange.using("snippets", function () {
      StackExchange.snippets.init();
      });
      });
      }, "code-snippets");

      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "1"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53275955%2fhow-to-join-two-dataframe-with-a-key-and-duplicate-the-matching-value-to-fill-in%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      3 Answers
      3






      active

      oldest

      votes








      3 Answers
      3






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      1














      Are you looking for merge?



      df.merge(df2, on='id')

      id col1 col2
      0 1 3.0 A
      1 1 0.0 A
      2 1 -1.0 A
      3 2 3.4 B
      4 2 4.0 B
      5 3 5.0 C
      6 4 6.0 D
      7 4 7.0 D
      8 4 8.0 D





      share|improve this answer





















      • Simplest and easiest way to do merging
        – id101112
        Nov 21 at 15:05
















      1














      Are you looking for merge?



      df.merge(df2, on='id')

      id col1 col2
      0 1 3.0 A
      1 1 0.0 A
      2 1 -1.0 A
      3 2 3.4 B
      4 2 4.0 B
      5 3 5.0 C
      6 4 6.0 D
      7 4 7.0 D
      8 4 8.0 D





      share|improve this answer





















      • Simplest and easiest way to do merging
        – id101112
        Nov 21 at 15:05














      1












      1








      1






      Are you looking for merge?



      df.merge(df2, on='id')

      id col1 col2
      0 1 3.0 A
      1 1 0.0 A
      2 1 -1.0 A
      3 2 3.4 B
      4 2 4.0 B
      5 3 5.0 C
      6 4 6.0 D
      7 4 7.0 D
      8 4 8.0 D





      share|improve this answer












      Are you looking for merge?



      df.merge(df2, on='id')

      id col1 col2
      0 1 3.0 A
      1 1 0.0 A
      2 1 -1.0 A
      3 2 3.4 B
      4 2 4.0 B
      5 3 5.0 C
      6 4 6.0 D
      7 4 7.0 D
      8 4 8.0 D






      share|improve this answer












      share|improve this answer



      share|improve this answer










      answered Nov 13 at 7:37









      user7374610

      6981422




      6981422












      • Simplest and easiest way to do merging
        – id101112
        Nov 21 at 15:05


















      • Simplest and easiest way to do merging
        – id101112
        Nov 21 at 15:05
















      Simplest and easiest way to do merging
      – id101112
      Nov 21 at 15:05




      Simplest and easiest way to do merging
      – id101112
      Nov 21 at 15:05













      0














      I believe you need map:



      df['col2'] = df['id'].map(df2.set_index('id')['col2'])


      Or left join with merge:



      df = df.merge(df2, on='id', how='left')




      print (df)
      id col1 col2
      0 1 3.0 A
      1 1 0.0 A
      2 1 -1.0 A
      3 2 3.4 B
      4 2 4.0 B
      5 3 5.0 C
      6 4 6.0 D
      7 4 7.0 D
      8 4 8.0 D





      share|improve this answer


























        0














        I believe you need map:



        df['col2'] = df['id'].map(df2.set_index('id')['col2'])


        Or left join with merge:



        df = df.merge(df2, on='id', how='left')




        print (df)
        id col1 col2
        0 1 3.0 A
        1 1 0.0 A
        2 1 -1.0 A
        3 2 3.4 B
        4 2 4.0 B
        5 3 5.0 C
        6 4 6.0 D
        7 4 7.0 D
        8 4 8.0 D





        share|improve this answer
























          0












          0








          0






          I believe you need map:



          df['col2'] = df['id'].map(df2.set_index('id')['col2'])


          Or left join with merge:



          df = df.merge(df2, on='id', how='left')




          print (df)
          id col1 col2
          0 1 3.0 A
          1 1 0.0 A
          2 1 -1.0 A
          3 2 3.4 B
          4 2 4.0 B
          5 3 5.0 C
          6 4 6.0 D
          7 4 7.0 D
          8 4 8.0 D





          share|improve this answer












          I believe you need map:



          df['col2'] = df['id'].map(df2.set_index('id')['col2'])


          Or left join with merge:



          df = df.merge(df2, on='id', how='left')




          print (df)
          id col1 col2
          0 1 3.0 A
          1 1 0.0 A
          2 1 -1.0 A
          3 2 3.4 B
          4 2 4.0 B
          5 3 5.0 C
          6 4 6.0 D
          7 4 7.0 D
          8 4 8.0 D






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 13 at 7:35









          jezrael

          319k22258337




          319k22258337























              0














              If you outer join them:



              df3 = pd.merge(df, df2, on='id', how='outer')


              Then you can replace NaN values in col1 by corresponding values in col2:



              df3.loc[df3.col1.isnull(), 'col1'] = df3.loc[df3.col1.isnull(), 'col2']
              print(df3)


              Output:



                  id col1 col2
              0 1 3 A
              1 1 0 A
              2 1 -1 A
              3 2 3.4 B
              4 2 4 B
              5 3 5 C
              6 4 6 D
              7 4 7 D
              8 4 8 D
              9 5 E E
              10 6 F F
              11 7 G G
              12 8 H H
              13 9 I I





              share|improve this answer


























                0














                If you outer join them:



                df3 = pd.merge(df, df2, on='id', how='outer')


                Then you can replace NaN values in col1 by corresponding values in col2:



                df3.loc[df3.col1.isnull(), 'col1'] = df3.loc[df3.col1.isnull(), 'col2']
                print(df3)


                Output:



                    id col1 col2
                0 1 3 A
                1 1 0 A
                2 1 -1 A
                3 2 3.4 B
                4 2 4 B
                5 3 5 C
                6 4 6 D
                7 4 7 D
                8 4 8 D
                9 5 E E
                10 6 F F
                11 7 G G
                12 8 H H
                13 9 I I





                share|improve this answer
























                  0












                  0








                  0






                  If you outer join them:



                  df3 = pd.merge(df, df2, on='id', how='outer')


                  Then you can replace NaN values in col1 by corresponding values in col2:



                  df3.loc[df3.col1.isnull(), 'col1'] = df3.loc[df3.col1.isnull(), 'col2']
                  print(df3)


                  Output:



                      id col1 col2
                  0 1 3 A
                  1 1 0 A
                  2 1 -1 A
                  3 2 3.4 B
                  4 2 4 B
                  5 3 5 C
                  6 4 6 D
                  7 4 7 D
                  8 4 8 D
                  9 5 E E
                  10 6 F F
                  11 7 G G
                  12 8 H H
                  13 9 I I





                  share|improve this answer












                  If you outer join them:



                  df3 = pd.merge(df, df2, on='id', how='outer')


                  Then you can replace NaN values in col1 by corresponding values in col2:



                  df3.loc[df3.col1.isnull(), 'col1'] = df3.loc[df3.col1.isnull(), 'col2']
                  print(df3)


                  Output:



                      id col1 col2
                  0 1 3 A
                  1 1 0 A
                  2 1 -1 A
                  3 2 3.4 B
                  4 2 4 B
                  5 3 5 C
                  6 4 6 D
                  7 4 7 D
                  8 4 8 D
                  9 5 E E
                  10 6 F F
                  11 7 G G
                  12 8 H H
                  13 9 I I






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 13 at 7:43









                  Alla Tarighati

                  594210




                  594210






























                      draft saved

                      draft discarded




















































                      Thanks for contributing an answer to Stack Overflow!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.





                      Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                      Please pay close attention to the following guidance:


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53275955%2fhow-to-join-two-dataframe-with-a-key-and-duplicate-the-matching-value-to-fill-in%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      鏡平學校

                      ꓛꓣだゔៀៅຸ໢ທຮ໕໒ ,ໂ'໥໓າ໼ឨឲ៵៭ៈゎゔit''䖳𥁄卿' ☨₤₨こゎもょの;ꜹꟚꞖꞵꟅꞛေၦေɯ,ɨɡ𛃵𛁹ޝ޳ޠ޾,ޤޒޯ޾𫝒𫠁သ𛅤チョ'サノބޘދ𛁐ᶿᶇᶀᶋᶠ㨑㽹⻮ꧬ꧹؍۩وَؠ㇕㇃㇪ ㇦㇋㇋ṜẰᵡᴠ 軌ᵕ搜۳ٰޗޮ޷ސޯ𫖾𫅀ल, ꙭ꙰ꚅꙁꚊꞻꝔ꟠Ꝭㄤﺟޱސꧨꧼ꧴ꧯꧽ꧲ꧯ'⽹⽭⾁⿞⼳⽋២៩ញណើꩯꩤ꩸ꩮᶻᶺᶧᶂ𫳲𫪭𬸄𫵰𬖩𬫣𬊉ၲ𛅬㕦䬺𫝌𫝼,,𫟖𫞽ហៅ஫㆔ాఆఅꙒꚞꙍ,Ꙟ꙱エ ,ポテ,フࢰࢯ𫟠𫞶 𫝤𫟠ﺕﹱﻜﻣ𪵕𪭸𪻆𪾩𫔷ġ,ŧآꞪ꟥,ꞔꝻ♚☹⛵𛀌ꬷꭞȄƁƪƬșƦǙǗdžƝǯǧⱦⱰꓕꓢႋ神 ဴ၀க௭எ௫ឫោ ' េㇷㇴㇼ神ㇸㇲㇽㇴㇼㇻㇸ'ㇸㇿㇸㇹㇰㆣꓚꓤ₡₧ ㄨㄟ㄂ㄖㄎ໗ツڒذ₶।ऩछएोञयूटक़कयँृी,冬'𛅢𛅥ㇱㇵㇶ𥄥𦒽𠣧𠊓𧢖𥞘𩔋цѰㄠſtʯʭɿʆʗʍʩɷɛ,əʏダヵㄐㄘR{gỚṖḺờṠṫảḙḭᴮᵏᴘᵀᵷᵕᴜᴏᵾq﮲ﲿﴽﭙ軌ﰬﶚﶧ﫲Ҝжюїкӈㇴffצּ﬘﭅﬈軌'ffistfflſtffतभफɳɰʊɲʎ𛁱𛁖𛁮𛀉 𛂯𛀞నఋŀŲ 𫟲𫠖𫞺ຆຆ ໹້໕໗ๆทԊꧢꧠ꧰ꓱ⿝⼑ŎḬẃẖỐẅ ,ờỰỈỗﮊDžȩꭏꭎꬻ꭮ꬿꭖꭥꭅ㇭神 ⾈ꓵꓑ⺄㄄ㄪㄙㄅㄇstA۵䞽ॶ𫞑𫝄㇉㇇゜軌𩜛𩳠Jﻺ‚Üမ႕ႌႊၐၸဓၞၞၡ៸wyvtᶎᶪᶹစဎ꣡꣰꣢꣤ٗ؋لㇳㇾㇻㇱ㆐㆔,,㆟Ⱶヤマފ޼ޝަݿݞݠݷݐ',ݘ,ݪݙݵ𬝉𬜁𫝨𫞘くせぉて¼óû×ó£…𛅑הㄙくԗԀ5606神45,神796'𪤻𫞧ꓐ㄁ㄘɥɺꓵꓲ3''7034׉ⱦⱠˆ“𫝋ȍ,ꩲ軌꩷ꩶꩧꩫఞ۔فڱێظペサ神ナᴦᵑ47 9238їﻂ䐊䔉㠸﬎ffiﬣ,לּᴷᴦᵛᵽ,ᴨᵤ ᵸᵥᴗᵈꚏꚉꚟ⻆rtǟƴ𬎎

                      Why https connections are so slow when debugging (stepping over) in Java?