I\'ve seen similar questions but mine is more direct and abstract.
I have a dataframe with \"n\" rows, being \"n\" a small number.We can assume the index is just the
Another way using list comprehension -
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]
Unstack and map i.e
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
In case you want the sorted columns then you can do
ndf = df.unstack().to_frame().T.sort_index(1,1)
Let's try this, using stack
, to_frame
, and 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
Output:
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
We need stack
and 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
Or you can using 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