更多 Python 数据处理的干货,敬请关注!!!!
pandas 在1.0版本发布后,更新频率非常高,今天我们看看关于频率统计的一个新方法。
pandas 以前的版本(1.1以前)中,就已经存在单列的频率统计。
我们以泰坦尼克号罹难乘客数据为例子:
image-20200806092628285
希望快速查看各个性别的记录数:
image-20200806092732878
上面显示的是绝对数值,可以显示占比吗?
image-20200806092901143
但是,以上都是针对单列的统计,很多时候我们希望对多列组合的频率统计。
现在,pandas 1.1 版本中已为 DataFrame 追加了同名方法 value_counts,下面来看看怎么使用。
查看性别与是否生还的统计数:
image-20200806093401214
同样地,通过参数可以微调输出结果:
image-20200806093527710
可能对于一些初学者来说会疑惑,难道旧版本得到这个结果很麻烦吗?
其实以前的版本做到一样的效果也是非常容易:
image-20200806094104421
没有按频率倒序输出?
简单在后面"接上"排序操作,结果就一样了:
image-20200806094230946
其实还有另一种解决思路,有兴趣看源码吧
统计比例也没有多大的事情:
image-20200806094306039
那肯定用新版本的方法呀,新方法一句就做了你这么多句的事情!
但是!!!
下面,我们就来看看"自己做主"的优势
之前在讲解单列的频率统计(Series.value_counts)时,其实遗漏了一个挺有用的参数,对于数值型的列才能使用。
希望查看年龄段的频率(分3段吧):
image-20200806095018867
通常我们希望按分段排序:
image-20200806095136997
你是不是觉得新版本的 DataFrame.value_counts 也有这个参数呢?
很遗憾,并没有这个参数,应该考虑到组合列的值是不能分段的。
不过对于自定义函数,当然想干啥就干啥:
image-20200806100144613
不仅如此,现在我们还可以利用 pd.cut 方法自定义分段标签等细致的控制。这里不多介绍。