zoukankan      html  css  js  c++  java
  • stack() unstack()函数

    总结:

    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
    View Code

    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
    View Code

    参考: 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]
    View Code

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

    ttt

  • 相关阅读:
    Python接口自动化之测试用例加载到测试套件的几种方法
    python接口自动化之logging日志模块相关
    Fiddler篡改请求参数后重新发起请求操作
    python接口自动化之request模块一些注意事项
    MAC系统下python放webdriver等文件路径
    python安装suds模块提示ModuleNotFoundError: No module named 'client'
    mac系统利用命令安装jenkins
    linux命令
    python 连接数据库,查询结果写入数据到excel
    python连接mysql数据表查询表获取数据导入到txt中
  • 原文地址:https://www.cnblogs.com/xxswkl/p/11018563.html
Copyright © 2011-2022 走看看