# 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 12
two 12>>> 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 12 first
two 12 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 12 first
two second 12 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