Convertir un DataFrame Pandas en un DataFrame de una sola fila

He visto preguntas similares pero la mía es más directa y abstracta.

Tengo un dataframe con “n” filas, siendo “n” un número pequeño. Podemos asumir que el índice es solo el número de la fila. Me gustaría convertirlo en una sola fila.

Así por ejemplo si tengo

A,B,C,D,E --------- 1,2,3,4,5 6,7,8,9,10 11,12,13,14,5 

Quiero como resultado un dataframe con una sola fila:

 A_1,B_1,C_1,D_1,E_1,A_2,B_2_,C_2,D_2,E_2,A_3,B_3,C_3,D_3,E_3 -------------------------- 1,2,3,4,5,6,7,8,9,10,11,12,13,14,5 

¿Cuál sería la forma más idiomática de hacer esto en Pandas?

Intentemos esto, usando stack , to_frame , y T:

 df.index = df.index + 1 df_out = df.stack() df_out.index = df_out.index.map('{0[1]}_{0[0]}'.format) df_out.to_frame().T 

Salida:

  A_1 B_1 C_1 D_1 E_1 A_2 B_2 C_2 D_2 E_2 A_3 B_3 C_3 D_3 E_3 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 5 

Necesitamos stack y swaplevel

 df1=df.stack().swaplevel() df1.index=df1.index.map('{0[0]}_{0[1]}'.format) df1.to_frame().T Out[527]: A_0 B_0 C_0 D_0 E_0 A_1 B_1 C_1 D_1 E_1 A_2 B_2 C_2 D_2 E_2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 5 

O puedes usar numpy

 pd.DataFrame(data=np.concatenate(df.values),index=[m+'_'+str(n) for m,n in zip(df.columns.tolist()*3,np.repeat([1,2,3],df.shape[1]))]).T Out[551]: A_1 B_1 C_1 D_1 E_1 A_2 B_2 C_2 D_2 E_2 A_3 B_3 C_3 D_3 E_3 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 5 

Desastackr y mapa ie

 ndf = df.unstack().to_frame().T ndf.columns = ndf.columns.map('{0[0]}_{0[1]}'.format) A_0 A_1 A_2 B_0 B_1 B_2 C_0 C_1 C_2 D_0 D_1 D_2 E_0 E_1 E_2 0 1 6 11 2 7 12 3 8 13 4 9 14 5 10 5 

En caso de que quieras las columnas ordenadas entonces puedes hacer

 ndf = df.unstack().to_frame().T.sort_index(1,1) 

Otra forma usando la lista de comprensión –

 ndf = pd.DataFrame(df.values.reshape(1, -1)[0]).T ndf.columns = [j + '_' + str(i) for i in range(1, 4) for j in df.columns]