用python将dataframe将中的两列处理成行索引和列索引

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
  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值