重新格式化数据帧的索引

斯泰西

我有一个数据框(df),每行有一年:

           Jan       Feb       Mar       Apr  ...       Aug       Sep       Oct       Nov       Dec
2021  0.852144  0.406946  0.067136  0.686585  ...  0.839023  0.803384  0.506883  0.829171  0.214810
2022  0.442388  0.296960  0.751213  0.690898  ...  0.701342  0.924836  0.534601  0.601725  0.673403

我想重新格式化,所以有一行按顺序排列所有月/年(如果 mmm yyyy 格式,每一行的索引),所以它看起来像:

                   0
Jan 2021    0.852144
Feb 2021    0.406945
Mar 2021    0.067136
Apr 2021    0.686585
     ...         ...
Aug 2022    0.701342
Sep 2022    0.924836
Oct 2022    0.534601
Nov 2022    0.601725
Dec 2022    0.673403

    

我用过:

df = df.unstack().to_frame().T.sort_index(0,1).T

但我无法让索引为所有行正确格式化(希望每个行索引的 mmm yyyy - 目前只返回备用行的月份)

                  0 
Jan  2021  0.852144 
     2022  0.442388 
Feb  2021  0.406946 
     2022  0.296960 
Mar  2021  0.067136 
     2022  0.751213 
Apr  2021  0.686585 
     2022  0.690898 
      ...       ...
Aug  2021  0.839023 
     2022  0.701342 
Sep  2021  0.803384 
     2022  0.924836 
Oct  2021  0.506883 
     2022  0.534601 
Nov  2021  0.829171 
     2022  0.601725 
Dec  2021  0.214810 
     2022  0.673403 
耶兹瑞尔

如果需要展平 MultiIndex,请使用Index.map,不需要转置排序:

df = df.unstack().to_frame()
df.index = df.index.map(lambda x: f'{x[0]} {x[1]}')

或使用DataFrame.melt

df = df.melt(ignore_index=False, value_name=0)
df.index = df.pop('variable') + ' ' + df.index.astype(str)
print (df)
                 0
Jan 2021  0.852144
Jan 2022  0.442388
Feb 2021  0.406946
Feb 2022  0.296960
Mar 2021  0.067136
Mar 2022  0.751213
Apr 2021  0.686585
Apr 2022  0.690898
Aug 2021  0.839023
Aug 2022  0.701342
Sep 2021  0.803384
Sep 2022  0.924836
Oct 2021  0.506883
Oct 2022  0.534601
Nov 2021  0.829171
Nov 2022  0.601725
Dec 2021  0.214810
Dec 2022  0.673403

如果需要按日期时间排序对连接值进行排序,请使用DataFrame.sort_index参数key

df = df.sort_index(key=lambda x: pd.to_datetime(x))
print (df)
                 0
Jan 2021  0.852144
Feb 2021  0.406946
Mar 2021  0.067136
Apr 2021  0.686585
Aug 2021  0.839023
Sep 2021  0.803384
Oct 2021  0.506883
Nov 2021  0.829171
Dec 2021  0.214810
Jan 2022  0.442388
Feb 2022  0.296960
Mar 2022  0.751213
Apr 2022  0.690898
Aug 2022  0.701342
Sep 2022  0.924836
Oct 2022  0.534601
Nov 2022  0.601725
Dec 2022  0.673403

相同的输出是DataFrame.stack

df = df.stack().to_frame()
#swapped levels
df.index = df.index.map(lambda x: f'{x[1]} {x[0]}')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章