总结:

1.stack:  将数据的列索引转换为行索引(列索引可以简单理解为列名)
2.unstack:将数据的行索引转换为列索引
3.stack和unstack默认操作为最内层,可以用level参数指定操作层.
4.stack和unstack默认旋转轴的级别将会成果结果中的最低级别(最内层)
5.stack转换dataframe时,若只有一层列索引则转换后的类型为series,否则为dataframe

unstack转换dataframe时,若只有一层行索引,情况同上

  1. import pandas as pd
  2.  
  3. df = pd.DataFrame({ '类别':['水果'] * 3 + ['蔬菜'] * 3 ,
  4. '名称':['苹果','梨','杏','菠菜','黄瓜','茄子'],
  5. '价格':[7,8,9,10,11,12]})
  6. print(df)
  7. print(df.stack())
  8. # 如下实现了行索引是类别,列索引是名称,交点处是价格
  9. df.set_index(['类别','名称'], inplace=True)
  10. print(df.unstack())
  11. # 类别 名称 价格
  12. # 0 水果 苹果 7
  13. # 1 水果 梨 8
  14. # 2 水果 杏 9
  15. # 3 蔬菜 菠菜 10
  16. # 4 蔬菜 黄瓜 11
  17. # 5 蔬菜 茄子 12
  18. # 0 类别 水果
  19. # 名称 苹果
  20. # 价格 7
  21. # 1 类别 水果
  22. # 名称 梨
  23. # 价格 8
  24. # 2 类别 水果
  25. # 名称 杏
  26. # 价格 9
  27. # 3 类别 蔬菜
  28. # 名称 菠菜
  29. # 价格 10
  30. # 4 类别 蔬菜
  31. # 名称 黄瓜
  32. # 价格 11
  33. # 5 类别 蔬菜
  34. # 名称 茄子
  35. # 价格 12
  36. # dtype: object
  37. # 价格
  38. # 名称 杏 梨 苹果 茄子 菠菜 黄瓜
  39. # 类别
  40. # 水果 9.0 8.0 7.0 NaN NaN NaN
  41. # 蔬菜 NaN NaN NaN 12.0 10.0 11.0

6 unstack对series做转换时,原先的行索引会消失,对Dataframe做转换时,不会消失

  1. import pandas as pd
  2.  
  3. df = pd.DataFrame({ '类别':['水果'] * 3 + ['蔬菜'] * 3 ,
  4. '名称':['苹果','梨','杏','菠菜','黄瓜','茄子'],
  5. '价格':[7,8,9,10,11,12]})
  6. print(df)
  7. # 注意当对series类型做unstack()的时候,原先的行索引会消失
  8. # 但对Dataframe类型做unstack()的时候,不会消失
  9.  
  10. # 会消失
  11. print(df.set_index(['名称','类别'])['价格'].unstack())
  12. # 不消失
  13. print(df.set_index(['名称','类别']).unstack())
  14. print(df.set_index(['名称','类别'])[['价格']].unstack())
  15. # 价格 名称 类别
  16. # 0 7 苹果 水果
  17. # 1 8 梨 水果
  18. # 2 9 杏 水果
  19. # 3 10 菠菜 蔬菜
  20. # 4 11 黄瓜 蔬菜
  21. # 5 12 茄子 蔬菜
  22. # 类别 水果 蔬菜
  23. # 名称
  24. # 杏 9.0 NaN
  25. # 梨 8.0 NaN
  26. # 苹果 7.0 NaN
  27. # 茄子 NaN 12.0
  28. # 菠菜 NaN 10.0
  29. # 黄瓜 NaN 11.0
  30. # 价格
  31. # 类别 水果 蔬菜
  32. # 名称
  33. # 杏 9.0 NaN
  34. # 梨 8.0 NaN
  35. # 苹果 7.0 NaN
  36. # 茄子 NaN 12.0
  37. # 菠菜 NaN 10.0
  38. # 黄瓜 NaN 11.0
  39. # 价格
  40. # 类别 水果 蔬菜
  41. # 名称
  42. # 杏 9.0 NaN
  43. # 梨 8.0 NaN
  44. # 苹果 7.0 NaN
  45. # 茄子 NaN 12.0
  46. # 菠菜 NaN 10.0
  47. # 黄瓜 NaN 11.0

参考: https://www.cnblogs.com/bambipai/p/7658311.html

7 通俗的说unstack()是把索引从左边到上边,stack()是从上边到左边.下面是把多重索引变为单重索引的方法.

  1. import pandas as pd
  2. a = pd.DataFrame({ 'id':['j','p','p','s'],
  3. 'RESULT_STRING':[1,2,3,4],
  4. 'values_max':[8,9,9,8],
  5. 'values_min':[5,5,5,5]
  6. })
  7. print(a)
  8. print(a.set_index(['id','RESULT_STRING']).unstack())
  9. r = a.set_index(['id','RESULT_STRING']).unstack().reset_index()
  10. print(r)
  11. # 由于是多重索引,把列名改成单重,更容易后序处理,这里把两个列名合并了.
  12. r.columns = [x[0]+str(x[1]) for x in r.columns]
  13. print(r)
  14. # id RESULT_STRING values_max values_min
  15. # 0 j 1 8 5
  16. # 1 p 2 9 5
  17. # 2 p 3 9 5
  18. # 3 s 4 8 5
  19. # values_max values_min
  20. # RESULT_STRING 1 2 3 4 1 2 3 4
  21. # id
  22. # j 8.0 NaN NaN NaN 5.0 NaN NaN NaN
  23. # p NaN 9.0 9.0 NaN NaN 5.0 5.0 NaN
  24. # s NaN NaN NaN 8.0 NaN NaN NaN 5.0
  25. # id values_max values_min
  26. # RESULT_STRING 1 2 3 4 1 2 3 4
  27. # 0 j 8.0 NaN NaN NaN 5.0 NaN NaN NaN
  28. # 1 p NaN 9.0 9.0 NaN NaN 5.0 5.0 NaN
  29. # 2 s NaN NaN NaN 8.0 NaN NaN NaN 5.0
  30. # id values_max1 values_max2 ... values_min2 values_min3 values_min4
  31. # 0 j 8.0 NaN ... NaN NaN NaN
  32. # 1 p NaN 9.0 ... 5.0 5.0 NaN
  33. # 2 s NaN NaN ... NaN NaN 5.0
  34. #
  35. # [3 rows x 9 columns]

参考: https://www.jb51.net/article/150975.htm

ttt

stack() unstack()函数的更多相关文章

  1. python pandas stack和unstack函数

    在用pandas进行数据重排时,经常用到stack和unstack两个函数.stack的意思是堆叠,堆积,unstack即"不要堆叠",我对两个函数是这样理解和区分的. 常见的数据 ...

  2. 第五课: - Stack / Unstack / Transpose函数

    第 5 课   我们将简要介绍 stack 和 unstack 以及 T (Transpose)函数. 在用pandas进行数据重排时,经常用到stack和unstack两个函数.stack的意思是堆 ...

  3. TensorFlow tensor张量拼接concat - split & stack - unstack

    TensorFlow提供两种类型的拼接: tf.concat(values, axis, name='concat'):按照指定的已经存在的轴进行拼接 tf.stack(values, axis=0, ...

  4. tf.unstack()、tf.stack()

    tf.unstack 原型: unstack( value, num=None, axis=0, name='unstack' ) 官方解释:https://tensorflow.google.cn/ ...

  5. 数据重塑图解—Pivot, Pivot-Table, Stack and Unstack

    Pivot pivot函数用于创建一个新的派生表,该函数有三个参数:index, columns和values.你需要在原始表中指定这三个参数所对定的列名,接下来pivot函数会创建一个新的表格,其中 ...

  6. pandas.DataFrame的pivot()和unstack()实现行转列

    示例: 有如下表需要进行行转列: 代码如下: # -*- coding:utf-8 -*- import pandas as pd import MySQLdb from warnings impor ...

  7. tf.unstack\tf.unstack

    tf.unstack 原型: unstack( value, num=None, axis=0, name='unstack' ) 官方解释:https://tensorflow.google.cn/ ...

  8. python pivot() 函数

    以下为python pandas 库的dataframe pivot()函数的官方文档: Reshape data (produce a “pivot” table) based on column ...

  9. 笔记:程序内存管理 .bss .data .rodata .text stack heap

    1.未初始化的全局变量(.bss段) bss段用来存放 没有被初始化 和 已经被初始化为0 的全局变量.如下例代码: #include<stdio.h> int bss_array[102 ...

随机推荐

  1. Site error: the ionCube PHP Loader needs to be installed.解决办法

    问题描述: 有些模块的作者为了保护代码而采用ionCube加密的代码,所以这里必须给服务器装上这个php的扩展,就好像以前的zend一样 解决办法: http://bbs.52jscn.com/thr ...

  2. MOVE - 重定位一个游标

    SYNOPSIS MOVE [ direction { FROM | IN } ] cursorname DESCRIPTION 描述 MOVE 在不检索数据的情况下重新定位一个游标. MOVE AL ...

  3. 03python面向对象编程4

    http://c.biancheng.net/view/2287.html 1.1定义类和对象 在面向对象的程序设计过程中有两个重要概念:类(class)和对象(object,也被称为实例,insta ...

  4. Linux下Centos7对外开放端口

    转载:https://blog.csdn.net/realjh/article/details/82048492 命令集合: ()查看对外开放的端口状态 查询已开放的端口 netstat -anp 查 ...

  5. Jmeter性能测试结果分析:响应时间为什么是下降的趋势?

    测试图数据库:边的插入,递增并发量,6000并发平均响应时间比7000的并发的平均响应时间还要大?    7000并发的99%用户响应时间是70.99,平均响应时间怎么就是38.59了?    一共两 ...

  6. 简单后台登录逻辑实现Controller

    package com.fei.controller.admin; import javax.servlet.http.HttpSession; import org.springframework. ...

  7. ESP8266-12F 中断

    外部中断: 基于ESP8266的NodeMcu的数字IO的中断功能是通过attachInterrupt,detachInterrupt函数所支持的.除了D0/GPIO16,中断可以绑定到任意GPIO的 ...

  8. Python---协程---重写多进程

    一. # 匹配一行文字中所有开头的字母import re s = 'i love you but you don\'t love me' # \b\m findallcontent = re.find ...

  9. day3 ord,chr,random,string

    day3复习 >>> for i in range(10): ... if i == 3: ... break ... print(i) ... 0 1 2 >>> ...

  10. java调用存储过程的方式

    1.问号是入参和出参,出参要指定类型 CallableStatement pstmt = conn.prepareCall("{call dbo.UP_CodeUp_***(?,?,?,?, ...