pandas每天一题-题目8:去重计数的多种实现方式
这是一个关于 pandas 从基础到进阶的练习题系列,来源于 github 上的 guipsamora/pandas_exercises 。这个项目从基础到进阶,可以检验你有多么了解 pandas。
我会挑选一些题目,并且 提供比原题库更多的解决方法以及更详尽的解析 。
计划每天更新一期,希望各位小伙伴先自行思考,再查看答案。如果对你有帮助,记得转发推荐给你的好友!
上期文章: pandas每天一题-题目7:批量列计算
后台回复"数据",可以下载本题数据集
如下数据:
数据描述:
- 此数据是订单明细表。一个订单会包含很多明细项,表中每个样本(每一行)表示一个明细项
- order_id 列存在重复
- quantity 是明细项数量
需求: 数据中共有多少个订单?
下面是答案了
方式1
因为 order_id 列是存在重复的,那么一种比较直观的方式就是去重+计数:
len(df.order_id.drop_duplicates())
1834
- Series.drop_duplicates() 返回的仍然是一个 Series
- len 函数可以计算 Series 值数量
但是你可能不知道的是,这个方式是不准确的!
方式2
之所以说上一种方式是不准确,是因为没有考虑到空值的问题。
len 函数不会忽略空值(nan) ,因此如果列中有空值,那么就比正确结果数量多。
正确的做法是:
len(df.order_id.drop_duplicates().dropna())