pandas的stack和unstack详解

frame = pd.DataFrame(np.arange(12).reshape((4, 3)),
                     index=[['a', 'a', 'b', 'b'], [1, 2, 1, 2]])
frame

形成一个二维数组

        0 	1 	2
a 	1 	0 	1 	2
    2 	3 	4 	5
b 	1 	6 	7 	8
    2 	9 	10 	11

unstack

unstack先把内层索引逆时针旋转到列索引,内层索引对应几列,就形成几个列索引
这里a对应两个内索引(1,2),所以2*3=6
frame.unstack()

    0 	    1 	    2
	1 	2 	1 	2 	1 	2
a 	0 	3 	1 	4 	2 	5
b 	6 	9 	7 	10 	8 	11

试试 frame.unstack().unstack()
当行索引无法旋转时,逆时针转动列索引,原来的行索引变成最内侧索引,这个其实又变成一维形态

0  1  a     0
      b     6
   2  a     3
      b     9
1  1  a     1
      b     7
   2  a     4
      b    10
2  1  a     2
      b     8
   2  a     5
      b    11
dtype: int32

type(frame.unstack().unstack())
其实它是具有三个索引的 pandas.core.series.Series结构
再次旋转
frame.unstack().unstack().unstack()
2*1=2列

        a 	b
0 	1 	0 	6
    2 	3 	9
1 	1 	1 	7
    2 	4 	10
2 	1 	2 	8
    2 	5 	11

stack

stack将二维转为一维
frame.stack()

a  1  0     0
      1     1
      2     2
   2  0     3
      1     4
      2     5
b  1  0     6
      1     7
      2     8
   2  0     9
      1    10
      2    11
dtype: int32

一维数组无法再次stack()

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值