python 累积概率密度图_一维数组


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

问题回顾:

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

解决思路及方案:

1. 索引


python 累积概率密度图_python 累积概率密度图_02


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

2. 分层索引

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


python 累积概率密度图_控制数据_03


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


python 累积概率密度图_控制数据_04


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

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


python 累积概率密度图_python pandas累计_05


4. 计算站点日降水量

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


python 累积概率密度图_python pandas累计_06


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


python 累积概率密度图_python pandas累计_07


5. 12小时累计降水

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


python 累积概率密度图_控制数据_08


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


python 累积概率密度图_数据_09


6. 分层索引切片

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


python 累积概率密度图_python 累积概率密度图_10


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


python 累积概率密度图_数据_11


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


python 累积概率密度图_数据_12


python 累积概率密度图_一维数组_13