Python 中多层级数据的生成与索引

Python 中多层级数据的生成与索引方法基于 Pandas 和 Numpy 中的一些功能,首先我们需要导入这两个库:

import pandas as pd
import numpy as np

我们知道,Pandas 序列中的序号序列 index 是一个列表,这个列表可以由多个二元组构成,如下所示:

index = [('California', 2000), ('California', 2010),
         ('New York', 2000), ('New York', 2010),
         ('Texas', 2000), ('Texas', 2010)]
populations = [33871648, 37253956,
               18976457, 19378102,
               20851820, 25145561]
pop = pd.Series(populations, index=index)
pop

这里写图片描述

对于这样的序列,我们依然可以通过指定的索引条件进行目标数据的选取:

pop[('California', 2010):('Texas', 2000)]

这里写图片描述

pop[[i for i in pop.index if i[1] == 2010]]

这里写图片描述

运用 Pandas 中的 MultiIndex.from_tuples 函数,我们可以将 index 列表转化为一个 MultiIndex 对象:

index = pd.MultiIndex.from_tuples(index)
index

这里写图片描述

当我们用该 MultiIndex 对象对 Pandas 序列进行重塑时,目标序列的序号将会被转化为多层级的形式:

pop = pop.reindex(index)
pop

这里写图片描述

这时,属于不同层级的序号将被视为不同维度上的索引值,我们可以使用多维索引的方式来索引所需要的目标数据:

pop[:, 2010]

这里写图片描述

我们可以通过 unstack 函数将序列 pop 转化为一个二维的数据框,序号中的两个维度将分别对应数据框的行与列:

pop_df = pop.unstack()
pop_df

这里写图片描述

可以通过调整参数 level 的值来指定生成数据框的行列:

pop.unstack(level=0)

这里写图片描述

以上内容转自 数析学院,原文内容较多,有空继续搬运,感兴趣的同学可以直接去查看 原文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值