pandas:将列的值和现有列变成multi-columns

pandas: turn column's values and existing columns into multi-columns

我正在尝试获取具有重复值的现有列,并将其转换为自身的 header。然后我想用一部分原来的header,这样最后我就有了一个multi-columns header.

我基本上是想转这个:

            ticker      PX_LAST PX_OPEN 
date
20000103    company1    1234    6543
20000104    company1    2345    7654
20000105    company1    3465    8765
20000106    company1    4567    9876
20000103    company2    1       6
20000104    company2    2       7
20000105    company2    3       8
20000106    company2    4       9

进入这个:

ticker      company1                company2
field       PX_LAST     PX_OPEN     PX_LAST     PX_OPEN
date
20000103    1234        6543        1           6
20000104    2345        7654        2           7
20000105    3465        8765        3           8
20000106    4567        9876        4           9

我一直在玩 DataFrame.pivotDataFrame.pivot_table 但我想不通。

我也尝试过迭代 DataFrame.iterrows(),但我认为它太慢了,而且在我看来,与上述方法相比,它的可读性很差。

试试这个:

>>> (df.reset_index()
      .set_index(['date','ticker'])
      .unstack().swaplevel(axis='columns')
      )

ticker   company1 company2 company1 company2
          PX_LAST  PX_LAST  PX_OPEN  PX_OPEN
date                                        
20000103     1234        1     6543        6
20000104     2345        2     7654        7
20000105     3465        3     8765        8
20000106     4567        4     9876        9

编辑:

>>> (df.reset_index()
      .set_index(['date','ticker'])
      .unstack().swaplevel(axis='columns')
      .sort_index(axis=1)
     )

ticker   company1         company2        
          PX_LAST PX_OPEN  PX_LAST PX_OPEN
date                                      
20000103     1234    6543        1       6
20000104     2345    7654        2       7
20000105     3465    8765        3       8
20000106     4567    9876        4       9