我正在努力解决如何将数据帧转换为具有多索引列的问题。
我有一个这样的数据帧:
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
等。
任何帮助都将不胜感激。谢谢!
发布于 2020-08-13 00:07:06
您可以使用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
https://stackoverflow.com/questions/63380414
复制相似问题