当前位置: 首页 > 科技观察

说说去重计数的多种实现

时间:2023-03-18 23:17:25 科技观察

本文转载自微信公众号《数据宇宙》,作者卡门之子。转载本文请联系数据宇宙公众号。这是一系列关于pandas的从基础到高级的练习,来自github上的guipsamora/pandas_exercises。从基础到高级,这个项目可以测试你对熊猫的了解程度。我会挑出一些题目,提供比原题库更多的解答和更详细的分析。数据如下:数据说明:该数据为订单列表。订单将包含许多详细项目。表中的每个样本(每一行)代表一个详细项目。order_id列有重复项。数量是明细项目的数量要求:数据中有多少个订单?这里是方法一的答案,因为order_id列存在重复,那么更直观的方式是去重+计数:len(df.order_id.drop_duplicates())1834Series.drop_duplicates()还是返回一个Series。len函数可以计算出Series值的个数但你可能不知道,更何况,这种方法是不准确的!方法2之所以说前面的方法不准确,是因为没有考虑到空值的问题。len函数不会忽略空值(nan),所以如果列中有空值,则不止正确的结果。正确的做法是:len(df.order_id.drop_duplicates().dropna())使用Series.dropna()方法去掉nan值提示:即使列中有多个nan,也只会有一个nan值retainafterdeduplication方法三其实pandas自己提供了一个忽略nan的计数方法:df.order_id.drop_duplicates().count()点评:这个方法个人认为是最合适的方法四pandas提供了一个快速汇总列的计数方法(Series):df.order_id.value_counts()Series.value_counts()相当于按orderid分组,统计数量。而排除nan相当于去重,所以:df.order_id.value_counts().count()点评:这是原项目的解决方案,不是很直观。我经常在value_counts方法中使用s的位置。我写错了,不过我自己做了一个方法查询器,这样就不会记错方法了: