枢轴熊猫数据框具有多索引列

Posted

技术标签:

【中文标题】枢轴熊猫数据框具有多索引列【英文标题】:Pivot pandas dataframe to have multi-indexed columns 【发布时间】:2020-12-02 10:21:59 【问题描述】:

我正在努力解决如何将数据框旋转为具有多索引列。

我有一个这样的数据框:

data = pd.DataFrame("name":["a", "a", "b", "b", "b", "b",  "c", "c"], 
                     "month":[1, 1, 2, 3, 1, 1, 1, 3], 
                     "buy_sell":["sell", "buy", "sell", "buy", "sell", "buy", "sell", "buy"],
                     "value":[10, 20, 30, 40, 20, 80, 50, 60])
data

我想将其转换为宽格式。索引是name,对于列我想用monthbuy_sell的组合创建多索引

或者,如果不是多索引列,我想旋转数据框,以便列具有足够的空间,例如 sell_1buy_1sell_2buy_2 等...

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

【问题讨论】:

data.pivot('name', ['month', 'buy_sell'], 'value')。这将创建您的多索引列 我收到KeyError: 'Level month not found'... 那么您的列不是'month',但它可能有尾随空格,如'month ' 您需要执行data.columns 才能查看列的实际名称 @It_is_Chris 您可能需要使用pivot_table 而不是pivot 【参考方案1】:

您可以使用set_index()unstack()

(data.set_index(['name','month','buy_sell'])['value']
      .unstack(['month','buy_sell']))

输出:

month        1           2     3
buy_sell  sell   buy  sell   buy
name                            
a         10.0  20.0   NaN   NaN
b         20.0  80.0  30.0  40.0
c         50.0   NaN   NaN  60.0

如果您坚持让这些列包含所有NaN,您可以unstack 一次一级:

(data.set_index(['name','month','buy_sell'])['value']
      .unstack('month').unstack('buy_sell')
     )

输出:

month        1         2           3     
buy_sell   buy  sell buy  sell   buy sell
name                                     
a         20.0  10.0 NaN   NaN   NaN  NaN
b         80.0  20.0 NaN  30.0  40.0  NaN
c          NaN  50.0 NaN   NaN  60.0  NaN

【讨论】:

谢谢!你的第二个答案正是我需要的:)

以上是关于枢轴熊猫数据框具有多索引列的主要内容,如果未能解决你的问题,请参考以下文章

如何将多索引列转换为熊猫数据框的单索引列?

如何将熊猫数据框多索引列移动到 2 行

熊猫多索引数据框合并问题

在熊猫中交换/排序多索引列

切片具有大列表的多索引熊猫数据框

查找熊猫中两个日期之间差异的最简单方法