根据索引在行中显示列值

Display column values in rows according to index

我有一个具有这种结构的 DataFrame

            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

并且我想翻转 DateValues 两列,以便为每个 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

使用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

最后添加 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