I have a DataFrame with this structure
Date Values
Variable
Var1 01/01/2021 0:00 1
Var1 01/01/2021 1:00 2
Var1 01/01/2021 2:00 3
Var2 01/01/2021 0:00 4
Var2 01/01/2021 1:00 5
Var3 01/01/2021 0:00 6
Var3 01/01/2021 1:00 7
Var3 01/01/2021 2:00 8
Var3 01/01/2021 3:00 9
and I want to flip both columns Date
and Values
to build a single row per Variable
:
01/01/2021 0:00 01/01/2021 1:00 01/01/2021 2:00 01/01/2021 3:00
Var1 1 2 3 NaN
Var2 4 5 NaN NaN
Var3 6 7 8 9
Use DataFrame.set_index
with Series.unstack
:
df1 = df.set_index('Date', append=True)['Values'].unstack()
print (df1)
Date 01/01/2021 0:00 01/01/2021 1:00 01/01/2021 2:00 01/01/2021 3:00
Variable
Var1 1.0 2.0 3.0 NaN
Var2 4.0 5.0 NaN NaN
Var3 6.0 7.0 8.0 9.0
And last add DataFrame.rename_axis
:
df1 = (df.set_index('Date', append=True)['Values']
.unstack()
.rename_axis(index=None, columns=None))
print (df1)
01/01/2021 0:00 01/01/2021 1:00 01/01/2021 2:00 01/01/2021 3:00
Var1 1.0 2.0 3.0 NaN
Var2 4.0 5.0 NaN NaN
Var3 6.0 7.0 8.0 9.0