review_pandas_multiindex


# stack
# unstack

col = ['a', 'b']
>>> ind = ['one', 'two']
>>> data = [[1, 2], [1, 2]]
>>> import pandas as pd
>>> df = pd.DataFrame(data, index=ind, columns=col)
>>> df.shape
(2, 2)
>>> df
     a  b
one  1  2
two  1  2
>>> df.index
Index(['one', 'two'], dtype='object')

>>> df.stack()
one  a    1
     b    2
two  a    1
     b    2
dtype: int64

>>> df.unstack()
a  one    1
   two    1
b  one    2
   two    2
dtype: int64

>>> df.index
Index(['one', 'two'], dtype='object')

>>> df.stack().index
MultiIndex(levels=[['one', 'two'], ['a', 'b']],
           labels=[[0, 0, 1, 1], [0, 1, 0, 1]])

>>> df.unstack().index
MultiIndex(levels=[['a', 'b'], ['one', 'two']],
           labels=[[0, 0, 1, 1], [0, 1, 0, 1]])


# Multiindex
>>> df['rank'] = ['first', 'second']
>>> df
     a  b    rank
one  1  2   first
two  1  2  second

>>> pd.MultiIndex.from_tuples(list(zip(*[df.index, df['rank']])))
MultiIndex(levels=[['one', 'two'], ['first', 'second']],
           labels=[[0, 1], [0, 1]])

>>> df.index = pd.MultiIndex.from_tuples(list(zip(*[df.index, df['rank']])))

>>> df
            a  b    rank
one first   1  2   first
two second  1  2  second

>>> df.unstack()
        a            b          rank        
    first second first second  first  second
one   1.0    NaN   2.0    NaN  first     NaN
two   NaN    1.0   NaN    2.0    NaN  second

>>> df.unstack(0)
          a         b        rank        
        one  two  one  two    one     two
first   1.0  NaN  2.0  NaN  first     NaN
second  NaN  1.0  NaN  2.0    NaN  second

# 获取Multiindex的值
>>> df.index.get_level_values(-1)
Index(['first', 'second'], dtype='object')

>>> df.index.get_level_values(-2)
Index(['one', 'two'], dtype='object')

参考

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b)     # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c)              # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped)          # 与 zip 相反,可理解为解压,为zip的逆过程,可用于矩阵的转置
[(1, 2, 3), (4, 5, 6)]
————————————————
版权声明:本文为CSDN博主「zsponly」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ezio23/article/details/81414092
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值