【问题标题】:Pandas dataframe to multi-level columns and rows熊猫数据框到多级列和行
【发布时间】:2022-01-25 01:10:06
【问题描述】:

我有一个格式如下的数据框:

    Date    Symbol  Close       Week    MA5         ROCMA5          ASX100-300 Flag
6/09/2019   BHP.au  31.627054   2019-35 31.05867882                 100
13/09/2019  BHP.au  32.341297   2019-36 31.96152763 0.029069131     100
20/09/2019  BHP.au  32.881332   2019-37 32.99630966 0.032375863     100
27/09/2019  BHP.au  32.0887     2019-38 32.18276939 -0.024655493    100
4/10/2019   BHP.au  30.747313   2019-39 31.43891068 -0.023113571    100
11/10/2019  BHP.au  31.200249   2019-40 30.83615913 -0.019172151    100
18/10/2019  BHP.au  30.30309    2019-41 31.06088448 0.007287722 100
25/10/2019  BHP.au  31.156698   2019-42 30.88493652 -0.005664615    100
1/11/2019   BHP.au  31.095726   2019-43 31.46852531 0.01889558      100
6/09/2019   A2M.au  31.627054   2019-35 31.05867882                 100
13/09/2019  A2M.au  32.341297   2019-36 31.96152763 0.029069131     100
20/09/2019  A2M.au  32.881332   2019-37 32.99630966 0.032375863     100
27/09/2019  A2M.au  32.0887     2019-38 32.18276939 -0.024655493    100
4/10/2019   A2M.au  30.747313   2019-39 31.43891068 -0.023113571    100
11/10/2019  A2M.au  31.200249   2019-40 30.83615913 -0.019172151    100
18/10/2019  A2M.au  30.30309    2019-41 31.06088448 0.007287722     100
25/10/2019  A2M.au  31.156698   2019-42 30.88493652 -0.005664615    100
1/11/2019   A2M.au  31.095726   2019-43 31.46852531 0.01889558  100

我希望输出是这样的:

                    2019-35 2019-36 2019-37 2019-38 2019-39 2019-40 2019-41 2019-42 2019-43
                    6/09/2019   13/09/2019  20/09/2019  27/09/2019  4/10/2019   11/10/2019  18/10/2019  25/10/2019  1/11/2019
                                        
BHP.au  ASX100-300  100         100         100         100     100         100         100 100 100
BHP.au  Close       31.627054   32.341297   32.881332   32.0887 30.747313   31.200249   30.30309    31.156698   31.095726
BHP.au  MA5         31.05867882 31.96152763 32.99630966 32.18276939     31.43891068 30.83615913 31.06088448 30.88493652 31.46852531
BHP.au  ROCMA5      0.029069131 0.032375863 -0.024655493    -0.023113571    -0.019172151    0.007287722 -0.005664615    0.01889558
A2M.au  ASX100-300  100 100 100 100 100 100 100 100 100
A2M.au  Close       31.627054   32.341297   32.881332   32.0887 30.747313   31.200249   30.30309    31.156698   31.095726
A2M.au  MA5         31.05867882 31.96152763 32.99630966 32.18276939     31.43891068 30.83615913 31.06088448 30.88493652 31.46852531
A2M.au  ROCMA5      0.029069131 0.032375863 -0.024655493    -0.023113571    -0.019172151    0.007287722 -0.005664615    0.01889558

我认为这涉及创建多级索引,但不知道该怎么做。

我试过了:

 large_df = large_df.pivot_table(index=['Symbol'], columns=['Week', 'Date'], values=['Close', 'MA5', 'ROCMA5'])

但是这些值只是被附加到第一行。

【问题讨论】:

    标签: python pandas dataframe pivot


    【解决方案1】:

    首先,我们使用pd.melt 删除除['Date', 'Week', 'Symbol'] 之外的列,然后我们将set_index 留下value,最后应用unstack 将倒数第二个和最后一个索引移动到列。

    pd.melt(
        df,
        id_vars=['Date', 'Week', 'Symbol'],
        var_name='variable',
        value_name='value',
    )\
    .set_index(['Symbol', 'variable', 'Week', 'Date'])\
    .unstack(level=[2, 3])
    

    【讨论】:

      猜你喜欢
      • 2018-04-25
      • 2021-06-27
      • 2020-06-03
      • 2022-01-13
      • 1970-01-01
      • 2016-08-20
      • 1970-01-01
      • 2018-11-11
      • 2021-05-27
      相关资源
      最近更新 更多