如何在Pandas中将数据从一个转换到另一个

j2cgzkjk  于 2022-12-09  发布在  其他
关注(0)|答案(1)|浏览(139)

我有以下数据

Mar-22  Mar-22  Apr-22  Apr-22
Dimension 1 Dimension 2 AB  CD  AB  CD
X       Y       1   2   5   6
P       Q       3   4   5   7

它必须转换为
我必须初始化标题日期

Dimension 1 Dimension 2 Date    AB  CD
X       Y       Mar-22  1   2
X       Y       Apr-22  5   6
P       Q       Mar-22  3   4
P       Q       Apr-22  5   7
cclgggtu

cclgggtu1#

使用MultiIndex.set_levels将列转换为日期时间,然后使用DataFrame.rename_axis作为新列名Date,并使用DataFrame.reset_indexDataFrame.stack重新整形,最后使用Series.dt.strftimeDate转换为原始格式:

print (df.columns)
MultiIndex([('Mar-22', 'AB'),
            ('Mar-22', 'CD'),
            ('Apr-22', 'AB'),
            ('Apr-22', 'CD')],
           )

print (df.index)
MultiIndex([('X', 'Y'),
            ('P', 'Q')],
           names=['Dimension 1', 'Dimension 2'])

df.columns = df.columns.set_levels(pd.to_datetime(df.columns.levels[0], 
                                   format='%b-%y'), level=0)

df = (df.rename_axis(['Date', None], axis=1)
      .stack(0)
      .reset_index()
      .assign(Date = lambda x: x.Date.dt.strftime('%b-%y'))

print (df)
  Dimension 1 Dimension 2    Date  AB  CD
0           X           Y  Mar-22   1   2
1           X           Y  Apr-22   5   6
2           P           Q  Mar-22   3   4
3           P           Q  Apr-22   5   7

相关问题