从unstack()到Pandas中的数据框

时间:2019-05-06 21:55:17

标签: python pandas dataframe

您好,我正在尝试从原始数据帧的unstack()创建一个新的数据帧。

  • 我的原始数据帧(df)如下:

    idx = [np.array(['Jan', 'Jan', 'Feb', 'Mar', 'Mar', 'Mar']),np.array(['A1', 'A2', 'A2', 'A1', 'A3', 'A4'])]
    data = [{'x': 1, 'y': 50}, {'x': 5, 'y': 40}, {'x': 3, 'y': 20}, {'x': 2, 'y': 70}, {'x': 7, 'y': 10}, {'x': 3, 'y': 80}]
    df = pd.DataFrame(data, index=idx, columns=['x','y'])
    df.index.names=['date','type']
    

它看起来像这样:

           x   y
date type
Jan  A1    1  50
     A2    5  40
Feb  A2    3  20
Mar  A1    2  70
     A3    7  10
     A4    3  80
  • 我的目标是创建一个新的数据框(df2),如下所示:

         xA1  xA2  xA3  xA4  yA1  yA2  yA3  yA4
    Jan    1    5  Nan  Nan   50   40  Nan  Nan
    Feb  Nan    3  Nan  Nan  Nan   20  Nan  Nan
    Mar    2  Nan    7    3   70  Nan   10   80
    

**我已经尝试了以下代码:

df2 = df.unstack()

这使我非常接近,但是我不知道如何从此处移到所需的数据框。

谢谢

1 个答案:

答案 0 :(得分:2)

因此您可以执行unstack,然后展平倍数索引

s=df.unstack()
s.columns=s.columns.map(''.join)
s
Out[70]: 
      xA1  xA2  xA3  xA4   yA1   yA2   yA3   yA4
date                                            
Feb   NaN  3.0  NaN  NaN   NaN  20.0   NaN   NaN
Jan   1.0  5.0  NaN  NaN  50.0  40.0   NaN   NaN
Mar   2.0  NaN  7.0  3.0  70.0   NaN  10.0  80.0