Pandas: Split a Dataframe into separate Dataframes based on certain Column's string values












2















Haven't found any answers that I could apply to my problem so here it goes:



I have an initial dataframe of images that I would like to split into two, based on the description of that image, which is a string in the "Description" column.



My problem issue is that not all descriptions are equally written. Here's an example of what I mean:



enter image description here



Some images are accelerated and others aren't. That's the criteria I want to use to split the dataset.



However even accelerated and non-accelerated image descriptions vary among them.



My strategy would be to rename every string that has "ACC" in it - this would cover all accelerated images - to "ACCELERATED IMAGE".



Then I could do:



df_Accl = df[df.Description == "ACCELERATED IMAGE"]
df_NonAccl = df[df.Description != "ACCELERATED IMAGE"]


How can I achieve this? This was just a strategy that I came up with, if there's any other more efficient way of doing this feel free to speak it.










share|improve this question


















  • 1





    Please try to avoid images and put some data that can be easily loaded next time..

    – Franco Piccolo
    Nov 18 '18 at 17:58











  • Related: Splitting a dataframe based on condition

    – jpp
    Nov 18 '18 at 18:07
















2















Haven't found any answers that I could apply to my problem so here it goes:



I have an initial dataframe of images that I would like to split into two, based on the description of that image, which is a string in the "Description" column.



My problem issue is that not all descriptions are equally written. Here's an example of what I mean:



enter image description here



Some images are accelerated and others aren't. That's the criteria I want to use to split the dataset.



However even accelerated and non-accelerated image descriptions vary among them.



My strategy would be to rename every string that has "ACC" in it - this would cover all accelerated images - to "ACCELERATED IMAGE".



Then I could do:



df_Accl = df[df.Description == "ACCELERATED IMAGE"]
df_NonAccl = df[df.Description != "ACCELERATED IMAGE"]


How can I achieve this? This was just a strategy that I came up with, if there's any other more efficient way of doing this feel free to speak it.










share|improve this question


















  • 1





    Please try to avoid images and put some data that can be easily loaded next time..

    – Franco Piccolo
    Nov 18 '18 at 17:58











  • Related: Splitting a dataframe based on condition

    – jpp
    Nov 18 '18 at 18:07














2












2








2








Haven't found any answers that I could apply to my problem so here it goes:



I have an initial dataframe of images that I would like to split into two, based on the description of that image, which is a string in the "Description" column.



My problem issue is that not all descriptions are equally written. Here's an example of what I mean:



enter image description here



Some images are accelerated and others aren't. That's the criteria I want to use to split the dataset.



However even accelerated and non-accelerated image descriptions vary among them.



My strategy would be to rename every string that has "ACC" in it - this would cover all accelerated images - to "ACCELERATED IMAGE".



Then I could do:



df_Accl = df[df.Description == "ACCELERATED IMAGE"]
df_NonAccl = df[df.Description != "ACCELERATED IMAGE"]


How can I achieve this? This was just a strategy that I came up with, if there's any other more efficient way of doing this feel free to speak it.










share|improve this question














Haven't found any answers that I could apply to my problem so here it goes:



I have an initial dataframe of images that I would like to split into two, based on the description of that image, which is a string in the "Description" column.



My problem issue is that not all descriptions are equally written. Here's an example of what I mean:



enter image description here



Some images are accelerated and others aren't. That's the criteria I want to use to split the dataset.



However even accelerated and non-accelerated image descriptions vary among them.



My strategy would be to rename every string that has "ACC" in it - this would cover all accelerated images - to "ACCELERATED IMAGE".



Then I could do:



df_Accl = df[df.Description == "ACCELERATED IMAGE"]
df_NonAccl = df[df.Description != "ACCELERATED IMAGE"]


How can I achieve this? This was just a strategy that I came up with, if there's any other more efficient way of doing this feel free to speak it.







python string pandas dataframe






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 18 '18 at 17:49









J. DevezJ. Devez

599




599








  • 1





    Please try to avoid images and put some data that can be easily loaded next time..

    – Franco Piccolo
    Nov 18 '18 at 17:58











  • Related: Splitting a dataframe based on condition

    – jpp
    Nov 18 '18 at 18:07














  • 1





    Please try to avoid images and put some data that can be easily loaded next time..

    – Franco Piccolo
    Nov 18 '18 at 17:58











  • Related: Splitting a dataframe based on condition

    – jpp
    Nov 18 '18 at 18:07








1




1





Please try to avoid images and put some data that can be easily loaded next time..

– Franco Piccolo
Nov 18 '18 at 17:58





Please try to avoid images and put some data that can be easily loaded next time..

– Franco Piccolo
Nov 18 '18 at 17:58













Related: Splitting a dataframe based on condition

– jpp
Nov 18 '18 at 18:07





Related: Splitting a dataframe based on condition

– jpp
Nov 18 '18 at 18:07












2 Answers
2






active

oldest

votes


















2














You can use str.contains for boolean mask - then filter by boolean indexing.



For invert mask is use ~, filter rows not contains ACC:



mask = df.Description.str.contains("ACC")
df_Accl = df[mask]
df_NonAccl = df[~mask]





share|improve this answer
























  • @KhalilAlHooti - thank you.

    – jezrael
    Nov 18 '18 at 18:00






  • 1





    This works (plus it's much more efficient than the strategy I was thinking)!

    – J. Devez
    Nov 18 '18 at 18:21



















0














You can use contains to find the rows that contain the substring ACC:



df['Description'].str.contains('ACC')





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%2f53363819%2fpandas-split-a-dataframe-into-separate-dataframes-based-on-certain-columns-str%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









    2














    You can use str.contains for boolean mask - then filter by boolean indexing.



    For invert mask is use ~, filter rows not contains ACC:



    mask = df.Description.str.contains("ACC")
    df_Accl = df[mask]
    df_NonAccl = df[~mask]





    share|improve this answer
























    • @KhalilAlHooti - thank you.

      – jezrael
      Nov 18 '18 at 18:00






    • 1





      This works (plus it's much more efficient than the strategy I was thinking)!

      – J. Devez
      Nov 18 '18 at 18:21
















    2














    You can use str.contains for boolean mask - then filter by boolean indexing.



    For invert mask is use ~, filter rows not contains ACC:



    mask = df.Description.str.contains("ACC")
    df_Accl = df[mask]
    df_NonAccl = df[~mask]





    share|improve this answer
























    • @KhalilAlHooti - thank you.

      – jezrael
      Nov 18 '18 at 18:00






    • 1





      This works (plus it's much more efficient than the strategy I was thinking)!

      – J. Devez
      Nov 18 '18 at 18:21














    2












    2








    2







    You can use str.contains for boolean mask - then filter by boolean indexing.



    For invert mask is use ~, filter rows not contains ACC:



    mask = df.Description.str.contains("ACC")
    df_Accl = df[mask]
    df_NonAccl = df[~mask]





    share|improve this answer













    You can use str.contains for boolean mask - then filter by boolean indexing.



    For invert mask is use ~, filter rows not contains ACC:



    mask = df.Description.str.contains("ACC")
    df_Accl = df[mask]
    df_NonAccl = df[~mask]






    share|improve this answer












    share|improve this answer



    share|improve this answer










    answered Nov 18 '18 at 17:56









    jezraeljezrael

    333k24276352




    333k24276352













    • @KhalilAlHooti - thank you.

      – jezrael
      Nov 18 '18 at 18:00






    • 1





      This works (plus it's much more efficient than the strategy I was thinking)!

      – J. Devez
      Nov 18 '18 at 18:21



















    • @KhalilAlHooti - thank you.

      – jezrael
      Nov 18 '18 at 18:00






    • 1





      This works (plus it's much more efficient than the strategy I was thinking)!

      – J. Devez
      Nov 18 '18 at 18:21

















    @KhalilAlHooti - thank you.

    – jezrael
    Nov 18 '18 at 18:00





    @KhalilAlHooti - thank you.

    – jezrael
    Nov 18 '18 at 18:00




    1




    1





    This works (plus it's much more efficient than the strategy I was thinking)!

    – J. Devez
    Nov 18 '18 at 18:21





    This works (plus it's much more efficient than the strategy I was thinking)!

    – J. Devez
    Nov 18 '18 at 18:21













    0














    You can use contains to find the rows that contain the substring ACC:



    df['Description'].str.contains('ACC')





    share|improve this answer




























      0














      You can use contains to find the rows that contain the substring ACC:



      df['Description'].str.contains('ACC')





      share|improve this answer


























        0












        0








        0







        You can use contains to find the rows that contain the substring ACC:



        df['Description'].str.contains('ACC')





        share|improve this answer













        You can use contains to find the rows that contain the substring ACC:



        df['Description'].str.contains('ACC')






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 18 '18 at 17:56









        Franco PiccoloFranco Piccolo

        1,576712




        1,576712






























            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.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53363819%2fpandas-split-a-dataframe-into-separate-dataframes-based-on-certain-columns-str%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







            這個網誌中的熱門文章

            Xamarin.form Move up view when keyboard appear

            Post-Redirect-Get with Spring WebFlux and Thymeleaf

            Anylogic : not able to use stopDelay()