A | B | C | D X 1 2 3 4 Y 5 6 7 8 Z 11 12 13 14
I want to convert the above data frame like this
XA | XB | XC | XD | YA |.....| ZD 1 2 3 4 5 14
please help me with this
CodePudding user response:
Use:
s = df.stack()
new_df = s.to_frame().T.set_axis([f'{x}{y}' for x, y in s.index], axis=1)
XA XB XC XD YA YB YC YD ZA ZB ZC ZD
0 1 2 3 4 5 6 7 8 11 12 13 14
CodePudding user response:
Here's a possible way. First, pd.melt
your data in all its columns but keep the original index:
>>> df df = pd.melt(df, value_vars=df.columns, ignore_index=False)
>>> df df
variable value
X A 1
Y A 5
Z A 11
X B 2
Y B 6
Z B 12
X C 3
Y C 7
Z C 13
X D 4
Y D 8
Z D 14
Now set the new index and transpose the data:
>>> df df = df[["value"]].set_index(df.index df["variable"]).T
>>> df
XA YA ZA XB YB ZB XC YC ZC XD YD ZD
value 1 5 11 2 6 12 3 7 13 4 8 14