Abdurrahman
Abdurrahman

Reputation: 23

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

Upvotes: 2

Views: 60

Answers (2)

jezrael
jezrael

Reputation: 862911

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

Upvotes: 1

yatu
yatu

Reputation: 88246

Here's one approach. Since there's no specified criteria for the column namings, I've just hardcoded in this case:

cols = ['U1', 'U2', 'U3', 'R1', 'R2', 'R3']
out = (df.rest.str.lstrip('R=')
              .str.split(',', expand=True)
              .rename(columns=dict(zip(range(len(cols)), cols)))
out['joints'] = df.joints.add(1)

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

Upvotes: 1

Related Questions