Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 透视数据帧以具有多索引列_Python_Pandas_Pivot_Multi Index - Fatal编程技术网

Python 透视数据帧以具有多索引列

Python 透视数据帧以具有多索引列,python,pandas,pivot,multi-index,Python,Pandas,Pivot,Multi Index,我正在努力解决如何使数据帧具有多索引列的问题 我有这样一个数据帧: data = pd.DataFrame({"name":["a", "a", "b", "b", "b", "b", "c", "c"], "month":[1, 1, 2, 3, 1,

我正在努力解决如何使数据帧具有多索引列的问题

我有这样一个数据帧:

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
,对于列,我想创建多个索引,将
月份
买入卖出

或者,如果不是多索引列,我希望旋转数据帧,使列具有足够的功能,例如
sell_1
buy_1
sell_2
buy_2


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

您可以使用
设置索引()
取消堆栈()

输出:

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
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
如果您坚持让这些列包含所有
NaN
,您可以
取消堆叠
一次一个级别:

(data.set_index(['name','month','buy_sell'])['value']
      .unstack('month').unstack('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
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

data.pivot('name',['month','buy\u sell','value')
。这将创建您的多索引列i get
keyrorm:'Level month not found'
…那么您的列就不是
'month'
,但它可能有尾随空格,如
'month'
,您需要执行
data.columns
来查看您的实际名称columns@It_is_Chris您可能需要使用
pivot\u表
而不是
pivot
。谢谢!你的第二个答案正是我需要的:)