这是一个关于 pandas 从基础到进阶的练习题系列,来源于 github 上的 guipsamora/pandas_exercises 。这个项目从基础到进阶,可以检验你有多么了解 pandas。
我会挑选一些题目,并且提供比原题库更多的解决方法以及更详尽的解析。
计划每天更新一期,希望各位小伙伴先自行思考,再查看答案。如果对你有帮助,记得转发推荐给你的好友!
上期文章:pandas每天一题-题目9:计算平均收入的多种方式
后台回复"数据",可以下载本题数据集
如下数据:
数据描述:
需求:列出共有多少个不同的 item_name?
在前面的练习中,其实我们已经讲解过相关的方式,今天作为补充,因此前面讲解过的方式这里不再列出。
重点回顾:pandas每天一题-题目8:去重计数的多种实现方式
下面是答案了
如果只是针对一列的去重计数,pandas 为此提供了方法:
df['item_name'].nunique()
如果只是简单列出方法,这不是我的文章风格。
我们尝试稍微深入一些了解这个方法,从而得到更多的解决方式!
本质上,pandas 为列(Series) 提供了去重操作,得到结果是一个 numpy 数组:
df['item_name'].unique()
提示:
之前我们讲解过 .drop_duplicates
方法,他们的区别是 .drop_duplicates
返回列(pandas.Series) ,.unique()
返回数组(numpy.array)
有了去重数组,统计数量是 python 的基本操作:
len(df['item_name'].unique())
这就是方法1 中的.nunique
的实现(它内部会考虑 nan 的情况)
最后,介绍一种纯粹 python 的方式
在 python 基本数据结构中,有一种去重的结构—— set :
set(df['item_name'])
Series.unique
类似,区别是,其返回的是 python 的 set 对象同理,统计数量即可:
len(set(df['item_name']))