Search code examples
pythonpandasdataframemulti-index

Display column values in rows according to index


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

Solution

  • 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