value_counts在pandas早先版本中是pandas.Series的函数,功能是统计这一列Series中各个元素的出现次数,并作为另一个Series返回。
在新版本pandas中增加了DataFrame的value_counts功能。
DataFrame.value_counts简介
开始的印象是,pandas会统计整个DataFrame中所有元素出现次数,并作为一个Series返回。
而实际上并不是的,它考虑到不同列数据类型可能不一样,因此返回的是一个很奇怪的结构:一个MultiIndex的Series。
下面示例做说明:
官网地址:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.value_counts.html?highlight=value_counts
a = pd.DataFrame(data=0, index=['1','2','3'],columns=['东城站','王府井'])

(原谅我贴这么丑的图)
可以看到这个dataframe中包含3行两列,都是数值数据。
此时打印a.value_counts():

如图所示,这是一个有两列Index的Series:Index的name分别为‘东城站’和‘王府井’,index的值为a中对应列的元素值;这个MultiIndex Series的值为(1,1,1),即对应index的统计计数。
需要注意的是,第一列index的最后一个元素是2,但并没有打出来,是我手动画上去的。
所以对于东城站而言,index=4出现1次,index=2出现两次,是分开的两个1,即value中的最后两个1,我想不出来这种结构有什么用=.=
下面探讨一下如何读取这种数据
获取某一列中某一元素出现次数
因为MultiIndex Series也是Series,所以可以用loc和iloc获取其值。
例如,想要获取东城站这一列中2出现的次数,则可以:



获取整个dataframe中4出现的次数:

其中loc中的维数为a的列数。
我是因为需要统计整个DataFrame中某一元素出现的次数,本以为这个新特性可以很方便的满足我的需求,试了一通发现根本没啥用。
目前不太清楚这个DataFrame.value_counts的应用场景,以后了解了再进行完善,如果你有什么建议,欢迎留言哦!
网友评论