• 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

  • 相关阅读:
    Junit单元测试
    win7的6个网络命令
    WOJ1024 (POJ1985+POJ2631) Exploration 树/BFS
    WOJ1022 Competition of Programming 贪心 WOJ1023 Division dp
    woj1019 Curriculum Schedule 输入输出 woj1020 Adjacent Difference 排序
    woj1018(HDU4384)KING KONG 循环群
    woj1016 cherry blossom woj1017 Billiard ball 几何
    woj1013 Barcelet 字符串 woj1014 Doraemon's Flashlight 几何
    woj1012 Thingk and Count DP好题
    woj1010 alternate sum 数学 woj1011 Finding Teamates 数学
  • 原文地址:https://www.cnblogs.com/xxswkl/p/11018563.html
Copyright © 2020-2023  润新知