pandas的value_counts方法

统计数值出现的次数。

一、Series:

>>> ds=pd.Series(list('abcdefeecdfa'))
>>> ds
0     a
1     b
2     c
3     d
4     e
5     f
6     e
7     e
8     c
9     d
10    f
11    a
dtype: object

>>> ds.value_counts()
e    3
c    2
a    2
d    2
f    2
b    1
dtype: int64
>>> 

二、DataFrame

>>> data = pd.DataFrame({'Qu1': [1, 3, 4, 3, 4],'Qu2': [2, 3, 1, 2, 3],'Qu3': [1, 5, 2, 4, 4]})
>>> data
   Qu1  Qu2  Qu3
0    1    2    1
1    3    3    5
2    4    1    2
3    3    2    4
4    4    3    4

>>> data.value_counts ()#直接使用,统计的只是一行数据的次数
Qu1  Qu2  Qu3
4         3    4            1
           1    2            1
3         3    5            1
           2    4            1
1         2    1            1
dtype: int64

如果我们想保持DataFrame结构不变,同时还要计算出现次数,那么只有通过apply方法进行处理了。

>>> data = pd.DataFrame({'Qu1': [1, 3, 4, 3, 4],'Qu2': [2, 3, 1, 2, 3],'Qu3': [1, 5, 2, 4, 4]})
>>> data.apply(pd.value_counts)
   Qu1  Qu2  Qu3
1  1.0  1.0  1.0
2  NaN  2.0  1.0
3  2.0  2.0  NaN
4  2.0  NaN  2.0
5  NaN  NaN  1.0

>>> data.apply(pd.value_counts).fillna(0)
   Qu1  Qu2  Qu3
1  1.0  1.0  1.0
2  0.0  2.0  1.0
3  2.0  2.0  0.0
4  2.0  0.0  2.0
5  0.0  0.0  1.0
>>> 

他是怎么计算的呢,又是怎么弄成这个样子呢,自己写个函数看看他的过程,为了方便,我们引入Counter。

from collections import Counter

>>> list = [1,2,3,4,5,4,3,7,2,8,1]
>>> num_Count=Counter(list)
>>> num_Count
Counter({1: 2, 2: 2, 3: 2, 4: 2, 5: 1, 7: 1, 8: 1})
>>> 

返回一个字典,正是我们需要的。

定义函数:

def dd(x):
   return pd.Series(Counter(x))

>>> def dd(x):
    return pd.Series(Counter(x))

>>> data.apply(dd)
   Qu1  Qu2  Qu3
1  1.0  1.0  1.0
2  NaN  2.0  1.0
3  2.0  2.0  NaN
4  2.0  NaN  2.0
5  NaN  NaN  1.0
>>> 

达到了我们预期的效果。

>>> def dd(x):
    print(Counter(x))
    return pd.Series(Counter(x))

>>> data.apply(dd)
Counter({3: 2, 4: 2, 1: 1})
Counter({2: 2, 3: 2, 1: 1})
Counter({4: 2, 1: 1, 5: 1, 2: 1})
   Qu1  Qu2  Qu3
1  1.0  1.0  1.0
2  NaN  2.0  1.0
3  2.0  2.0  NaN
4  2.0  NaN  2.0
5  NaN  NaN  1.0
>>> 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值