pandas.unstack()

pandas.unstack()

当一个DataFrame有多个索引时,unstack() 这是一个根据索引行列转换的函数。个人认为初次接触比较难以理解。

这是针对于DataFrame这种类型的数据进行变换的一个函数,有一个重要的参数是level:

level : int, string, or list of these, default -1 (last level)

Level(s) of index to unstack, can pass level name

就是索引的序号——第几级索引。

用我自己的话说是,将第level个索引横向展开,其余的各级索引不动,不知道大家能不能理解。比如下面的例子SID的level为1,key的level为2.
如果还是不懂的话可以看下面这个例子:

转换后的column的values 还是一个numpy数组,只不过数组中的元素类型为元组。最后一句生成式的代码还可以重新命名表的列名。

>>> import pandas as pd
>>> df = pd.DataFrame({'month':[1,2,3],'year':[2,3,4]})
>>> df['SID'],df['key']=4,5
>>> df.set_index(['SID','key'],append=True)
           month  year
  SID key             
0 4   5        1     2
1 4   5        2     3
2 4   5        3     4
>>> df = df.set_index(['SID','key'],append=True)
>>> df
           month  year
  SID key             
0 4   5        1     2
1 4   5        2     3
2 4   5        3     4
>>> df = df.unstack(0)
>>> df
        month       year      
            0  1  2    0  1  2
SID key                       
4   5       1  2  3    2  3  4
>>> print(df.columns.values)
[('month', 0) ('month', 1) ('month', 2) ('year', 0) ('year', 1)
 ('year', 2)]
>>> type(df.columns.values)

>>> type(df.columns.values[1])

>>> df.columns = ["_".join([str(i) for i in col]).strip() for col in df.columns.values]
>>> df
         month_0  month_1  month_2  year_0  year_1  year_2
SID key                                                   
4   5          1        2        3       2       3       4

 

你可能感兴趣的:(python)