Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

pandas: repeat a row if a column contains certain value

I have a dataframe as follows,

import pandas as pd
df = pd.DataFrame({'text':['I go to school','open the green door', 'go out and play'],
               'pos':[['PRON','VERB','ADP','NOUN'],['VERB','DET','ADJ','NOUN'],['VERB','ADP','CCONJ','VERB']], 'info':['school','door','play']})

I would like to repeat the verbs in text column if the corresponding ‘pos’ is ‘VERB’. so I did the following so far,

df['text'] = df['text'].str.split()
df_new = df.apply(pd.Series.explode)

and then I tried to repeat the specific rows in this manner,

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

print(df_new.loc[df_new.index.repeat(df_new['pos']=='VERB')].reset_index(drop=True))

but it does not return anything. My desired output would be,

    new_df 
       text    pos    info
0        I   PRON  school
1       go   VERB  school
2       go   VERB  school
3       to    ADP  school
4   school   NOUN  school
5     open   VERB    door
6     open   VERB    door
7      the    DET    door
8    green    ADJ    door
9     door   NOUN    door
10       go   VERB    play
11       go   VERB    play
12      out    ADP    play
13     and  CCONJ    play
14    play   VERB    play
15    play   VERB    play

>Solution :

If the index is not important you can use:

df2 = (df.assign(text=df['text'].str.split())
         .explode(['text', 'pos'], ignore_index=True)
      )

df_new = (pd.concat([df2, df2[df2['pos'].eq('VERB')]])
            .sort_index().reset_index(drop=True)
          )

alternative using repeat (and df2 from above):

df_new = (df2.loc[df2.index.repeat(df2['pos'].eq('VERB').add(1))]
             .reset_index(drop=True)
          )

output:

      text    pos    info
0        I   PRON  school
1       go   VERB  school
2       go   VERB  school
3       to    ADP  school
4   school   NOUN  school
5     open   VERB    door
6     open   VERB    door
7      the    DET    door
8    green    ADJ    door
9     door   NOUN    door
10      go   VERB    play
11      go   VERB    play
12     out    ADP    play
13     and  CCONJ    play
14    play   VERB    play
15    play   VERB    play
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading