2017-11-25 208 views

回答

2

有区别value_counts返回:

产生的对象将是降序排列,使得第一元件是最频繁出现的元素。

count不是,它排序index输出(通过柱在groupby('col')创建)。


df.groupby('colA').count() 

是通过聚合功能count.df所有列因此指望它不包括NaN的价值观。

因此,如果需要count只有一列需要:

df.groupby('colA')['colA'].count() 

样品:

df = pd.DataFrame({'colB':list('abcdefg'), 
        'colC':[1,3,5,7,np.nan,np.nan,4], 
        'colD':[np.nan,3,6,9,2,4,np.nan], 
        'colA':['c','c','b','a',np.nan,'b','b']}) 

print (df) 
    colA colB colC colD 
0 c a 1.0 NaN 
1 c b 3.0 3.0 
2 b c 5.0 6.0 
3 a d 7.0 9.0 
4 NaN e NaN 2.0 
5 b f NaN 4.0 
6 b g 4.0 NaN 

print (df['colA'].value_counts()) 
b 3 
c 2 
a 1 
Name: colA, dtype: int64 

print (df.groupby('colA').count()) 
     colB colC colD 
colA     
a  1  1  1 
b  3  2  2 
c  2  2  1 

print (df.groupby('colA')['colA'].count()) 
colA 
a 1 
b 3 
c 2 
Name: colA, dtype: int64 
3

Groupbyvalue_counts是完全不同的功能。您无法在数据框上执行value_counts。

Value Counts被限制仅适用于单个列或系列,它的唯一目的是返回值序列的频率

Groupby返回一个对象,以便可以在其上执行统计计算。因此,当您执行df.groupby(col).count()时,它将返回groupby中specific columns列中存在的真值的数量。

时,应使用value_counts并且当应该groupby.count使用: 让我们的示例

df = pd.DataFrame({'id': [1, 2, 3, 4, 2, 2, 4], 'color': ["r","r","b","b","g","g","r"], 'size': [1,2,1,2,1,3,4]}) 

GROUPBY计数

df.groupby('color').count() 
     id size 
color   
b  2  2 
g  2  2 
r  3  3 

GROUPBY计数通常用于获取有效数字值 存在于所有列with reference towith respect to一个 或更多列指定。所以不包括数字(南)。

要找到使用group的频率,您需要像@jez那样对指定的列本身进行聚合。 (也许是为了避免这种情况,并使开发者生活更轻松value_counts被实现)。

值计数

df['color'].value_counts() 

r 3 
g 2 
b 2 
Name: color, dtype: int64 

数值COUNT通常用于查找的值在一个特定列 本的频率。

结论:

.groupby(col).count()当你想找到目前在列的有效值相对于指定col频率应该被使用。

.value_counts()应该用来找出一系列的频率。