Splitting a dataframe based on position in python based on delimeter

Viewed 38

I have a dataframe like this:

df=
users|userids
user1|1
user3|3
user1,user2|1,2
user3,user4|3,4
user1,user3|1,3
user5,user6,user2|5,6,2
user11,user12,user13,user14,user15|11,12,13,14,15

Now I want the dataframe to be split as follows:

df_modified=
user|userid
user1|1
user2|2
user3|3
user4|4
user5|5
user6|6
user11|11
user12|12
user13|13
user14|14
user15|15

I have tried

df_modified=df.pivot(columns='users',values='userids')

Doesn't work.Actually the values in df are of type strings

1 Answers

Let's use .str.split to split the strings in columns around the delimiter , then use np.hstack to stack the splitted strings in columns horizontally, finally create new dataframe from these stacked columns:

df_mod = pd.DataFrame({'users': np.hstack(df['users'].str.split(',')),
                       'userids': np.hstack(df['userids'].str.split(','))})\
           .drop_duplicates('users', ignore_index=True)

     users userids
0    user1       1
1    user2       2
2    user3       3
3    user4       4
4    user5       5
5    user6       6
6   user11      11
7   user12      12
8   user13      13
9   user14      14
10  user15      15
Related