统计数值出现的次数。
一、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
>>>