1. 操作案例

构建dataframe,dataframe 设为 frame,其中三列分别为 year,month,ws。

import pandas as pd
import numpy as np
data = {'year': [2000,2000,2000, 2001,2001,2001, 2002,2002,2002, 2003,2003,2003],
        'month': [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3,],
        'ws':np.random.randint(7, size=12)}
frame = pd.DataFrame(data)

在这里插入图片描述
修改索引

frame2 = frame.set_index(['year', 'month'])
frame2 = frame2.unstack()
frame2.columns = frame.month.unique().tolist()

目标变成
在这里插入图片描述

2. 函数讲解

statck(堆叠)

该操作会“旋转”或将列中的数据透视到行。

我将通过一系列的例子来说明这些操作。考虑一个带有字符串数组作为行和列索引的小型DataFrame:

import pandas as pd
import numpy as np
data = pd.DataFrame(np.arange(6).reshape((2, 3)),
                    index=pd.Index(['Ohio', 'Colorado'], name='state'),
                    columns=pd.Index(['one', 'two', 'three'],
                    name='number'))
data
Out[2]: 
number    one  two  three
state                    
Ohio        0    1      2
Colorado    3    4      5

在这里插入图片描述
在这份数据上使用stack方法会将列透视到行,产生一个新的Series:

result = data.stack() #得到一个 Series
result
Out[4]: 
state     number
Ohio      one       0
          two       1
          three     2
Colorado  one       3
          two       4
          three     5
dtype: int32

在这里插入图片描述

unstack(拆堆)

该操作会将行中的数据透视到列。

从一个多层索引序列中,你可以使用 unstack 方法将数据重排列后放入一个DataFrame中:

result.unstack()# 恢复到 stack 前的状态
Out[5]: 
number    one  two  three
state                    
Ohio        0    1      2
Colorado    3    4      5

在这里插入图片描述

默认情况下,最内层是已拆堆的(与stack方法一样)。你可以传入一个层级序号或名称来拆分一个不同的层级:

result.unstack(0)
Out[7]: 
state   Ohio  Colorado
number                
one        0         3
two        1         4
three      2         5
result.unstack('state') #解开 'state'列
Out[8]: 
state   Ohio  Colorado
number                
one        0         3
two        1         4
three      2         5
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐