【问题标题】: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

标签: python pandas pivot multi-index


【解决方案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

【讨论】:

  • 谢谢!你的第二个答案正是我需要的:)
猜你喜欢
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
  • 2020-06-19
  • 2020-06-19
  • 2019-09-01
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
相关资源
最近更新 更多