Search code examples
pythonpython-3.xpandasdataframecolumnsorting

How can I split a specific column to new columns in Pandas?


I want to split "rest" column to new columns by comma and drop "R=". And also add +1 to "joints" column. How can i do?

df
     joints           rest
          0  R=0,0,1,1,1,1
          3  R=0,0,1,1,1,1
         42  R=0,0,1,1,1,1
         45  R=0,0,1,1,1,1

I want to do like this:

joints U1 U2 U3 R1 R2 R3
1      0  0  1  1  1  1
4      0  0  1  1  1  1
43     0  0  1  1  1  1
46     0  0  1  1  1  1

Solution

  • For more dynamic rename columns names is used function with lambda, for new columns is used Series.str.split with expand=True and assign back to original by DataFrame.join:

    f = lambda x: f'U{x+1}' if x < 3 else f'R{x-2}' 
    df1 = (df.join(df.pop('rest').str.split('=')
                                 .str[1]
                                 .str.split(',', expand=True)
                                 .rename(columns=f))
              .assign(joints = df['joints'] + 1))
    print (df1)
       joints U1 U2 U3 R1 R2 R3
    0       1  0  0  1  1  1  1
    1       4  0  0  1  1  1  1
    2      43  0  0  1  1  1  1
    3      46  0  0  1  1  1  1