总结:

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

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

import pandas as pd

df = pd.DataFrame({ '类别':['水果'] * 3 + ['蔬菜'] * 3 ,
'名称':['苹果','梨','杏','菠菜','黄瓜','茄子'],
'价格':[7,8,9,10,11,12]})
print(df)
print(df.stack())
# 如下实现了行索引是类别,列索引是名称,交点处是价格
df.set_index(['类别','名称'], inplace=True)
print(df.unstack())
# 类别 名称 价格
# 0 水果 苹果 7
# 1 水果 梨 8
# 2 水果 杏 9
# 3 蔬菜 菠菜 10
# 4 蔬菜 黄瓜 11
# 5 蔬菜 茄子 12
# 0 类别 水果
# 名称 苹果
# 价格 7
# 1 类别 水果
# 名称 梨
# 价格 8
# 2 类别 水果
# 名称 杏
# 价格 9
# 3 类别 蔬菜
# 名称 菠菜
# 价格 10
# 4 类别 蔬菜
# 名称 黄瓜
# 价格 11
# 5 类别 蔬菜
# 名称 茄子
# 价格 12
# dtype: object
# 价格
# 名称 杏 梨 苹果 茄子 菠菜 黄瓜
# 类别
# 水果 9.0 8.0 7.0 NaN NaN NaN
# 蔬菜 NaN NaN NaN 12.0 10.0 11.0

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

import pandas as pd

df = pd.DataFrame({ '类别':['水果'] * 3 + ['蔬菜'] * 3 ,
'名称':['苹果','梨','杏','菠菜','黄瓜','茄子'],
'价格':[7,8,9,10,11,12]})
print(df)
# 注意当对series类型做unstack()的时候,原先的行索引会消失
# 但对Dataframe类型做unstack()的时候,不会消失 # 会消失
print(df.set_index(['名称','类别'])['价格'].unstack())
# 不消失
print(df.set_index(['名称','类别']).unstack())
print(df.set_index(['名称','类别'])[['价格']].unstack())
# 价格 名称 类别
# 0 7 苹果 水果
# 1 8 梨 水果
# 2 9 杏 水果
# 3 10 菠菜 蔬菜
# 4 11 黄瓜 蔬菜
# 5 12 茄子 蔬菜
# 类别 水果 蔬菜
# 名称
# 杏 9.0 NaN
# 梨 8.0 NaN
# 苹果 7.0 NaN
# 茄子 NaN 12.0
# 菠菜 NaN 10.0
# 黄瓜 NaN 11.0
# 价格
# 类别 水果 蔬菜
# 名称
# 杏 9.0 NaN
# 梨 8.0 NaN
# 苹果 7.0 NaN
# 茄子 NaN 12.0
# 菠菜 NaN 10.0
# 黄瓜 NaN 11.0
# 价格
# 类别 水果 蔬菜
# 名称
# 杏 9.0 NaN
# 梨 8.0 NaN
# 苹果 7.0 NaN
# 茄子 NaN 12.0
# 菠菜 NaN 10.0
# 黄瓜 NaN 11.0

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

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

import pandas as pd
a = pd.DataFrame({ 'id':['j','p','p','s'],
'RESULT_STRING':[1,2,3,4],
'values_max':[8,9,9,8],
'values_min':[5,5,5,5]
})
print(a)
print(a.set_index(['id','RESULT_STRING']).unstack())
r = a.set_index(['id','RESULT_STRING']).unstack().reset_index()
print(r)
# 由于是多重索引,把列名改成单重,更容易后序处理,这里把两个列名合并了.
r.columns = [x[0]+str(x[1]) for x in r.columns]
print(r)
# id RESULT_STRING values_max values_min
# 0 j 1 8 5
# 1 p 2 9 5
# 2 p 3 9 5
# 3 s 4 8 5
# values_max values_min
# RESULT_STRING 1 2 3 4 1 2 3 4
# id
# j 8.0 NaN NaN NaN 5.0 NaN NaN NaN
# p NaN 9.0 9.0 NaN NaN 5.0 5.0 NaN
# s NaN NaN NaN 8.0 NaN NaN NaN 5.0
# id values_max values_min
# RESULT_STRING 1 2 3 4 1 2 3 4
# 0 j 8.0 NaN NaN NaN 5.0 NaN NaN NaN
# 1 p NaN 9.0 9.0 NaN NaN 5.0 5.0 NaN
# 2 s NaN NaN NaN 8.0 NaN NaN NaN 5.0
# id values_max1 values_max2 ... values_min2 values_min3 values_min4
# 0 j 8.0 NaN ... NaN NaN NaN
# 1 p NaN 9.0 ... 5.0 5.0 NaN
# 2 s NaN NaN ... NaN NaN 5.0
#
# [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. 在.NET使用Newtonsoft.Json转换,读取,写入json

    首先,大家要明白什么是json,了解更多关于json方面资料大家可以点击https://www.ibm.com/developerworks/cn/web/wa-lo-json/ ,我在这里简单介绍下 ...

  2. Response笔记

    # 今日内容          1. HTTP协议:响应消息     2. Response对象     3. ServletContext对象 ## HTTP协议:     1. 请求消息:客户端发 ...

  3. php 操作分表代码

    //哈希分表 function get_hash_table($table, $userid) { $str = crc32($userid); if ($str < 0) { $hash = ...

  4. mailstats - 显示邮件状态信息

    总览 mailstats [-o] [-C cffile] [-f stfile] 描述 mailstats工具显示当前的邮件状态信息. 首先,先显示统计启动时所记录的时间,当然是以ctime(3)所 ...

  5. python中的@property

    @property 可以将python定义的函数“当做”属性访问,从而提供更加友好访问方式,但是有时候setter/getter也是需要的 class People: def __init__(sel ...

  6. Shell编程变量

    shell变量 什么是变量,存放了各种数据,在linux怎么定义了变量,name=ken,name就是变量名,ken就是变量值, 但是在shell中,有三种方式: name=ken name='ken ...

  7. C#基础知识之Dynamic类型

    Dynamic类型是C#4.0中引入的新类型,它允许其操作掠过编译器类型检查,而在运行时处理. 编程语言有时可以划分为静态类型化语言和动态类型化语言.C#和Java经常被认为是静态化类型的语言,而Py ...

  8. mnist 卷积神经网络

    # from keras.models import Sequential# from keras.layers.core import Dense,Activation,Flatten #creat ...

  9. AI人工智能对医疗行业有哪些巨大贡献?

    人工智能(AI)有可能显着改变医生的角色并彻底改变医学实践.这篇定性评价文章总结了过去12个月的人工智能健康研究,涉及不同的医学专业,并讨论了与这一新兴技术相关的当前优势和挑战. 医生,特别是担任领导 ...

  10. 面试题常考&必考之--js中的难点!!!原型链,原型(__proto__),原型对象(prototype)结合例子更易懂

    1>首先,我们先将函数对象认识清楚: 补充snow的另一种写法: var snow =function(){}; 2>其次:就是原型对象 每当我们定义一个函数对象的时候,这个对象中就会包含 ...