Cross addition in pandas











up vote
0
down vote

favorite












How to apply cross addition (OR) in my pandas dataframe like below.



Input:



   A  B  C  D
0 0 1 0 1


Output:



   A  B  C  D
0 0 1 0 1
1 1 1 1 1
2 0 1 0 1
3 1 1 1 1


So far I can achieve using this,



cols=df.columns
n=len(cols)
df1=pd.concat([df]*n,ignore_index=True).eq(1)
df2= pd.concat([df.T]*n,axis=1,ignore_index=True).eq(1)
df2.columns=cols
df2=df2.reset_index(drop=True)
print (df1|df2).astype(int)


I think there is much more simpler way to handle this case.










share|improve this question


























    up vote
    0
    down vote

    favorite












    How to apply cross addition (OR) in my pandas dataframe like below.



    Input:



       A  B  C  D
    0 0 1 0 1


    Output:



       A  B  C  D
    0 0 1 0 1
    1 1 1 1 1
    2 0 1 0 1
    3 1 1 1 1


    So far I can achieve using this,



    cols=df.columns
    n=len(cols)
    df1=pd.concat([df]*n,ignore_index=True).eq(1)
    df2= pd.concat([df.T]*n,axis=1,ignore_index=True).eq(1)
    df2.columns=cols
    df2=df2.reset_index(drop=True)
    print (df1|df2).astype(int)


    I think there is much more simpler way to handle this case.










    share|improve this question
























      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      How to apply cross addition (OR) in my pandas dataframe like below.



      Input:



         A  B  C  D
      0 0 1 0 1


      Output:



         A  B  C  D
      0 0 1 0 1
      1 1 1 1 1
      2 0 1 0 1
      3 1 1 1 1


      So far I can achieve using this,



      cols=df.columns
      n=len(cols)
      df1=pd.concat([df]*n,ignore_index=True).eq(1)
      df2= pd.concat([df.T]*n,axis=1,ignore_index=True).eq(1)
      df2.columns=cols
      df2=df2.reset_index(drop=True)
      print (df1|df2).astype(int)


      I think there is much more simpler way to handle this case.










      share|improve this question













      How to apply cross addition (OR) in my pandas dataframe like below.



      Input:



         A  B  C  D
      0 0 1 0 1


      Output:



         A  B  C  D
      0 0 1 0 1
      1 1 1 1 1
      2 0 1 0 1
      3 1 1 1 1


      So far I can achieve using this,



      cols=df.columns
      n=len(cols)
      df1=pd.concat([df]*n,ignore_index=True).eq(1)
      df2= pd.concat([df.T]*n,axis=1,ignore_index=True).eq(1)
      df2.columns=cols
      df2=df2.reset_index(drop=True)
      print (df1|df2).astype(int)


      I think there is much more simpler way to handle this case.







      python pandas






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked yesterday









      Mohamed Thasin ah

      3,13031236




      3,13031236
























          2 Answers
          2






          active

          oldest

          votes

















          up vote
          3
          down vote



          accepted










          You can use numpy | operation with broadcast as:



          data = df.values
          df = pd.DataFrame((data.T | data), columns=df.columns)


          Or using np.logical_or as:



          df = pd.DataFrame(np.logical_or(data,data.T).astype(int), columns=df.columns)




          print(df)

          A B C D
          0 0 1 0 1
          1 1 1 1 1
          2 0 1 0 1
          3 1 1 1 1





          share|improve this answer




























            up vote
            1
            down vote













            Numpy solution:



            First extract first row to 1d array with iloc and then broadcast by a[:, None] for change shape to Mx1:



            a = df.iloc[0].values
            df = pd.DataFrame(a | a[:, None], columns=df.columns)
            print (df)
            A B C D
            0 0 1 0 1
            1 1 1 1 1
            2 0 1 0 1
            3 1 1 1 1





            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',
              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%2f53372452%2fcross-addition-in-pandas%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes








              up vote
              3
              down vote



              accepted










              You can use numpy | operation with broadcast as:



              data = df.values
              df = pd.DataFrame((data.T | data), columns=df.columns)


              Or using np.logical_or as:



              df = pd.DataFrame(np.logical_or(data,data.T).astype(int), columns=df.columns)




              print(df)

              A B C D
              0 0 1 0 1
              1 1 1 1 1
              2 0 1 0 1
              3 1 1 1 1





              share|improve this answer

























                up vote
                3
                down vote



                accepted










                You can use numpy | operation with broadcast as:



                data = df.values
                df = pd.DataFrame((data.T | data), columns=df.columns)


                Or using np.logical_or as:



                df = pd.DataFrame(np.logical_or(data,data.T).astype(int), columns=df.columns)




                print(df)

                A B C D
                0 0 1 0 1
                1 1 1 1 1
                2 0 1 0 1
                3 1 1 1 1





                share|improve this answer























                  up vote
                  3
                  down vote



                  accepted







                  up vote
                  3
                  down vote



                  accepted






                  You can use numpy | operation with broadcast as:



                  data = df.values
                  df = pd.DataFrame((data.T | data), columns=df.columns)


                  Or using np.logical_or as:



                  df = pd.DataFrame(np.logical_or(data,data.T).astype(int), columns=df.columns)




                  print(df)

                  A B C D
                  0 0 1 0 1
                  1 1 1 1 1
                  2 0 1 0 1
                  3 1 1 1 1





                  share|improve this answer












                  You can use numpy | operation with broadcast as:



                  data = df.values
                  df = pd.DataFrame((data.T | data), columns=df.columns)


                  Or using np.logical_or as:



                  df = pd.DataFrame(np.logical_or(data,data.T).astype(int), columns=df.columns)




                  print(df)

                  A B C D
                  0 0 1 0 1
                  1 1 1 1 1
                  2 0 1 0 1
                  3 1 1 1 1






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered yesterday









                  Sandeep Kadapa

                  5,341426




                  5,341426
























                      up vote
                      1
                      down vote













                      Numpy solution:



                      First extract first row to 1d array with iloc and then broadcast by a[:, None] for change shape to Mx1:



                      a = df.iloc[0].values
                      df = pd.DataFrame(a | a[:, None], columns=df.columns)
                      print (df)
                      A B C D
                      0 0 1 0 1
                      1 1 1 1 1
                      2 0 1 0 1
                      3 1 1 1 1





                      share|improve this answer



























                        up vote
                        1
                        down vote













                        Numpy solution:



                        First extract first row to 1d array with iloc and then broadcast by a[:, None] for change shape to Mx1:



                        a = df.iloc[0].values
                        df = pd.DataFrame(a | a[:, None], columns=df.columns)
                        print (df)
                        A B C D
                        0 0 1 0 1
                        1 1 1 1 1
                        2 0 1 0 1
                        3 1 1 1 1





                        share|improve this answer

























                          up vote
                          1
                          down vote










                          up vote
                          1
                          down vote









                          Numpy solution:



                          First extract first row to 1d array with iloc and then broadcast by a[:, None] for change shape to Mx1:



                          a = df.iloc[0].values
                          df = pd.DataFrame(a | a[:, None], columns=df.columns)
                          print (df)
                          A B C D
                          0 0 1 0 1
                          1 1 1 1 1
                          2 0 1 0 1
                          3 1 1 1 1





                          share|improve this answer














                          Numpy solution:



                          First extract first row to 1d array with iloc and then broadcast by a[:, None] for change shape to Mx1:



                          a = df.iloc[0].values
                          df = pd.DataFrame(a | a[:, None], columns=df.columns)
                          print (df)
                          A B C D
                          0 0 1 0 1
                          1 1 1 1 1
                          2 0 1 0 1
                          3 1 1 1 1






                          share|improve this answer














                          share|improve this answer



                          share|improve this answer








                          edited yesterday

























                          answered yesterday









                          jezrael

                          307k20243317




                          307k20243317






























                               

                              draft saved


                              draft discarded



















































                               


                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53372452%2fcross-addition-in-pandas%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

                              Can a sorcerer learn a 5th-level spell early by creating spell slots using the Font of Magic feature?

                              Does disintegrating a polymorphed enemy still kill it after the 2018 errata?

                              A Topological Invariant for $pi_3(U(n))$