Python 熊猫重新排列多索引系列

Python 熊猫重新排列多索引系列,python,pandas,multi-index,Python,Pandas,Multi Index,在pandas版本0.19.2上,我有以下带有多索引的数据帧: import pandas as pd import numpy as np arrays = [[2001, 2001, 2002, 2002, 2002, 2003, 2004, 2004], ['A', 'B', 'A', 'C', 'D', 'B', 'C', 'D']] tuples = list(zip(*arrays)) index = pd.MultiIndex.from_tuples(tup

在pandas版本0.19.2上,我有以下带有多索引的数据帧:

import pandas as pd
import numpy as np

arrays = [[2001, 2001, 2002,  2002, 2002, 2003, 2004, 2004],
          ['A', 'B', 'A', 'C', 'D', 'B', 'C', 'D']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
s = pd.Series(np.random.randn(8), index=index, name='signal')
如下所示:

first  second
2001   A        -2.48
       B         0.95
2002   A         0.55
       C         0.65
       D        -1.32
2003   B        -0.25
2004   C         0.86
       D        -0.31
我想得到一个摘要应急数据框,其中列是唯一的“第二个”,索引是“第一个”索引,如下所示:

       A      B     C     D
2001  -2.48  0.95   NaN   NaN
2002  0.55   NaN    0.65
2003  NaN    -0.25  NaN   NaN
2004  NaN    NaN    0.86  -0.31
你知道怎么做吗?我玩了
groupby()
,如下所示,但哪儿也去不了

s.groupby(level=1).apply(lambda x: "to do")
相关问题: 我相信在多索引中需要唯一的if对:

df = s.unstack()
print (df)
second         A         B         C         D
first                                         
2001    1.752237  0.348548       NaN       NaN
2002   -0.022903       NaN -0.961702  0.079236
2003         NaN -0.393272       NaN       NaN
2004         NaN       NaN -0.600994 -0.594842
但如果在实际数据中得到:

ValueError:索引包含重复的条目,无法重塑

这意味着在
多索引中存在重复项,如:

print (s)
first  second
2001   A         0.478052 <-2001, A
       A         0.485261 <-2001, A
2002   A        -0.474997
       C        -1.165866
       D        -0.755630
2003   B         0.588104
2004   C        -1.439245
       D        -0.461221
Name: signal, dtype: float64

哈简单。谢谢你,先生。当网站允许我的时候,我会接受答案。
print (s.groupby(level=[0,1]).mean())
first  second
2001   A         0.958668
2002   A        -0.459612
       C         0.534821
       D         1.469257
2003   B        -1.103208
2004   C         0.098037
       D         0.722135
Name: signal, dtype: float64

df = s.groupby(level=[0,1]).mean().unstack()
print (df)
second         A         B         C         D
first                                         
2001    0.481657       NaN       NaN       NaN
2002   -0.474997       NaN -1.165866 -0.755630
2003         NaN  0.588104       NaN       NaN
2004         NaN       NaN -1.439245 -0.461221