枢轴熊猫数据框具有多索引列
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
,对于列我想用month
和buy_sell
的组合创建多索引
或者,如果不是多索引列,我想旋转数据框,以便列具有足够的空间,例如 sell_1
、buy_1
、sell_2
、buy_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
【讨论】:
谢谢!你的第二个答案正是我需要的:)以上是关于枢轴熊猫数据框具有多索引列的主要内容,如果未能解决你的问题,请参考以下文章