Try: # Create an example dataframe df = pd.DataFrame({"genres":["Fantasy|Sci-Fi", "Action|Adventure|Fantasy", "Thriller", "Action|Adventure|Thriller|bbv","Action","Action|Adventure|thriller"]}) # Get a dataframe with as many columns as there are genres df = df.genres.str.get_dummies(sep = "|") # Get the genres as values df = df.multiply(df.columns) # Rename the columns to have the genre id df.columns = ["genre_" + str(x) for x in range(len(df.columns))] **Input**: [![enter image description here][1]][1] **Output**: [![enter image description here][2]][2] ***EDIT:*** you can simply use pandas [assign][3] method: df.assign(genre1= df.genres.str.split("|", expand = True).iloc[:,:1], genre2 = df.genres.str.split("|", expand = True).iloc[:,1:2]) ***Output:** [![enter image description here][4]][4] [1]: https://i.sstatic.net/6mqdB.png [2]: https://i.sstatic.net/7q4OW.png [3]: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.assign.html [4]: https://i.sstatic.net/tNhJA.png