dividir una columna en varias columnas con un nombre específico en el dataframe de pandas

Tengo el siguiente dataframe:

pri sec TOM AB,CD,EF JACK XY,YZ HARRY FG NICK KY,NY,SD,EF,FR 

Necesito los siguientes resultados con los nombres de las columnas de la siguiente manera (según la cantidad de campos separados que existen en la columna ‘sec’):

 pri sec sec0 sec1 sec2 sec3 sec4 TOM AB,CD,EF AB CD EF NaN NaN JACK XY,YZ XY YZ NaN NaN NaN HARRY FG FG NaN NaN NaN NaN NICK KY,NY,SD,EF,FR KY NY SD EF ER 

¿Puedo recibir alguna sugerencia?

Utilice join + split + add_prefix :

 df = df.join(df['sec'].str.split(',', expand=True).add_prefix('sec')) print (df) pri sec sec0 sec1 sec2 sec3 sec4 0 TOM AB,CD,EF AB CD EF None None 1 JACK XY,YZ XY YZ None None None 2 HARRY FG FG None None None None 3 NICK KY,NY,SD,EF,FR KY NY SD EF FR 

Y si es necesario NaN s add fillna :

 df = df.join(df['sec'].str.split(',', expand=True).add_prefix('sec').fillna(np.nan)) print (df) pri sec sec0 sec1 sec2 sec3 sec4 0 TOM AB,CD,EF AB CD EF NaN NaN 1 JACK XY,YZ XY YZ NaN NaN NaN 2 HARRY FG FG NaN NaN NaN NaN 3 NICK KY,NY,SD,EF,FR KY NY SD EF FR 

Intenta seguir el código (explicaciones como comentarios). Encuentra la longitud máxima de los elementos en la columna “sec” y crea nombres en consecuencia:

 maxlen = max(list(map(lambda x: len(x.split(",")) ,df.sec))) # find max length in 'sec' column cols = ["sec"+str(x) for x in range(maxlen)] # create new column names datalist = list(map(lambda x: x.split(","), df.sec)) # create list from entries in "sec" newdf = pd.DataFrame(data=datalist, columns=cols) # create dataframe of new columns newdf = pd.concat([df, newdf], axis=1) # add it to original dataframe print(newdf) 

Salida:

  pri sec sec0 sec1 sec2 sec3 sec4 0 TOM AB,CD,EF AB CD EF None None 1 JACK XY,YZ XY YZ None None None 2 HARRY FG FG None None None None 3 NICK KY,NY,SD,EF,FR KY NY SD EF FR