首页 > 解决方案 > 来自现有 pandas 数据框列的 MultiIndex 列

问题描述

我正在尝试将我的 pandas 数据框重新索引为按列的 MultiIndex。我探索过的大多数答案似乎只能按行回答。我现在的df样子是这样的:

  ticker calendardate     eps     price      ps       revenue
0   ABNB   2019-12-31   -2.59       NaN     NaN          4.80
1   ABNB   2020-12-31  -16.12    146.80  25.962          3.37
2   AMZN   2019-12-31   23.46   1847.84   3.266          2.80
3   AMZN   2020-12-31   42.64   3256.93   4.233          3.86

我想要一个基于的 MultiIndex,calendardate以便我的输出看起来像这样:

  ticker        eps           price           ps           revenue
            2019   2020    2019    2020   2019    2020    2019  2020
0   ABNB   -2.59 -16.12     NaN  146.80    NaN  25.962    4.80  3.37
1   AMZN   23.46  42.64 1847.84 3256.93  3.266   4.233    2.80  3.86

任何帮助,将不胜感激。谢谢

标签: pythonpandas

解决方案


我们可以使用分隔符周围的str.split列拆分,然后用于选择拆分列的年份部分,现在将数据框的索引设置为列,然后提取然后重塑。calenderdate-str[0]tickeryearunstack

y = df['calendardate'].str.split('-', n=1).str[0]
df.drop('calendardate', 1).set_index(['ticker', y]).unstack()

如果dtypeof 列calendardate是,datetime那么我们可以改为使用:

y = df['calendardate'].dt.year
df.drop('calendardate', 1).set_index(['ticker', y]).unstack()

               eps             price           ps              revenue      
calendardate   2019   2020     2019     2020   2019    2020    2019  2020
ticker                                                                   
ABNB          -2.59 -16.12      NaN   146.80    NaN  25.962     4.8  3.37
AMZN          23.46  42.64  1847.84  3256.93  3.266   4.233     2.8  3.86

推荐阅读