python pandas累计_python数据分析实战:pandas之层级聚合

ad17c087d21c485ee1dc0eba28c49da6.png

之前我们介绍了pandas的分组聚合(传送门:python数据分析实战:pandas之分组聚合),那么对于这个求累计降水的案例,如果不使用分组的功能,能不能用其他方法实现呢?

问题回顾:

现有一次降水过程的逐小时站点观测资料,包括:站号、年、月、日、时以及各气象要素。如何计算每个站点过程的总降水量?如何计算每个站点日总降水量?如何计算12小时累计降水量?

解决思路及方案:

1. 索引

34f2dcb3b3a3e5ffcc7bb7ffeff20d84.png

Series是pandas的一维数组对象(DataFrame多维),包含有一个值序列['a','b','c','d','e','f']和一组数据标签RangeIndex(start=0, stop=6, step=1),也称为索引

2. 分层索引

分层索引允许在一个轴向上拥有多个索引层级,提供了一种在低维度的形式中处理高维度数据的方式。

6cfc75bc6062b2f6ab5932adc9312a0b.png

分层索引可以方便地选出数据子集,并按层级进行汇总统计。pandas很多统计函数中有一个参数level,可以控制数据在某个特定的轴上进行聚合,参见下图:

0c7bd399081d9187ad15a65886722b74.png

3. 计算站点过程的总降水量

根据上面的背景介绍,我们需要将降水数据在站点上进行聚合,那么就需要先将站点设置为index,然后在level=0上聚合即可得到需要的结果。

7767eebfa5c874debfa031331b257111.png

4. 计算站点日降水量

需要计算站点日降水量,则需要同时在站点和时间上进行聚合,这里必须使用分层索引

c5ec8d94a06551c3639eca8adcd3bd06.png

这里进行聚合时需要注意,因为是同时在多个要素上进行聚合,所以level必须指定一个分层索引的列表level=[0,1,2,3]

9ac7c615751596fe104eb8a8c505f4ff.png

5. 12小时累计降水

和分局聚和类似,这里按层级聚合之前,也需要将小时这一列信息转为'a'和'b'两种标识。

416c2cffe5073d103e0f8a680c0fb38c.png

此时的level记得要把hour这一列带进去,即level=[0,1,2,3,4]

aebc0f6ea4a49d6b4a017aac38e272fe.png

6. 分层索引切片

除了参考分组聚合,将小时的信息替换之外,分层索引还可以通过索引切片来计算12小时累计降水。先将站号、年、月、日和时设为多层索引

efb520fe70a1c200d7a7c5dbd634a9af.png

将1-12时的数据单独切出来

24128d26cdef949ff9699dcb5209ed5f.png

再指定level=[0,1,2,3]聚合即可得到12小时累计降水

59451aeae724bc92e17cba23ebc2af01.png
1d37c116ea6d5617afa66179a9d16561.png
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值