首页 > 解决方案 > 使用 stack/unstack 或 groupby 在 python (pandas) 上将长数据帧转换为宽数据帧

问题描述

我有一个长数据框,看起来像这样,有两个标题,第一个带有变量,第二个带有宽格式的日期。

公司 价格 体积
日期
2011 年 1 月 1 日 特斯拉 2 1
2011 年 1 月 2 日 特斯拉 2 1
2011 年 1 月 1 日 微软 2 1
2011 年 1 月 2 日 微软 2 1

我想将其转换为长格式:

价格 体积
日期 特斯拉 微软 特斯拉 微软
2011 年 1 月 1 日 2 2 1 1
2011 年 1 月 2 日 2 2 1 1

如果可能的话,我想使用堆栈或 unstack/groupby 来执行此操作。假设我将长数据框保存为 df - 我将如何将其转换为名为 Wide 的 pandas 数据框?

标签: pythonpandasdataframe

解决方案


这是set_index添加为 MultiIndex 的第二级,然后append=True添加到列中:companyunstack company

df = df.set_index('company', append=True).unstack(level='company')

df

        price      volume     
company  MSFT TSLA   MSFT TSLA
date                          
1/1/11      2    2      1    1
1/2/11      2    2      1    1

数据框:

df = pd.DataFrame({'company': {'1/1/11': 'MSFT', '1/2/11': 'MSFT'},
                   'price': {'1/1/11': 2, '1/2/11': 2},
                   'volume': {'1/1/11': 1, '1/2/11': 1}})

推荐阅读