什么时候使用 df.value_counts() 与 df.groupby('...').count() 比较合适?
When is it appropriate to use df.value_counts() vs df.groupby('...').count()?
我听说 Pandas 通常有多种方法可以做同样的事情,但我想知道 –
如果我尝试按特定列中的值对数据进行分组并计算具有该值的项目数,什么时候使用 df.groupby('colA').count()
有意义,什么时候使用df['colA'].value_counts()
?
有区别value_counts
return:
The resulting object will be in descending order so that the first element is the most frequently-occurring element.
但 count
不是,它按 index
排序输出(由 groupby('col')
中的列创建)。
df.groupby('colA').count()
用于通过函数 count.
聚合 df
的所有列,因此它计算不包括 NaN
s 的值。
所以如果需要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
Groupby
和value_counts
是完全不同的函数。您不能在数据帧上执行 value_counts。
Value Counts
仅限于单个列或系列,其唯一目的是 return 系列值的频率
Groupby
return是一个对象,因此可以对其进行统计计算。因此,当您执行 df.groupby(col).count()
时,它将 return 相对于 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 count is generally used for getting the valid number of values
present in all the columns with reference to
or with respect to
one
or more columns specified. So not a number (nan) will be excluded.
要使用 groupby 查找频率,您需要像@jez 那样针对指定的列本身进行聚合。 (也许是为了避免这种情况并使开发人员的生活更轻松 value_counts 已实施)。
值计数:
df['color'].value_counts()
r 3
g 2
b 2
Name: color, dtype: int64
Value count is generally used for finding the frequency of the values
present in one particular column.
总结:
.groupby(col).count()
应在您想要查找相对于指定 col
的列中出现的有效值的频率时使用。
.value_counts()
应该用于查找系列的频率。
简而言之:.value_counts()
Return 包含 DataFrame 中 唯一行 计数的系列,这意味着它会计算特定的各个值行并报告列中有多少个值:
想象我们有一个像这样的数据框:
df = pd.DataFrame({'first_name': ['John', 'Anne', 'John', 'Beth'],
'middle_name': ['Smith', pd.NA, pd.NA, 'Louise']})
first_name middle_name
0 John Smith
1 Anne <NA>
2 John <NA>
3 Beth Louise
然后我们在上面应用value_counts:
df.value_counts()
first_name middle_name
Beth Louise 1
John Smith 1
dtype: int64
如您所见,它没有计算具有 NA 值的行。
但是 count()
计算每列或每行的 non-NA 个单元格。
在我们的示例中:
df.count()
first_name 4
middle_name 2
dtype: int64
我听说 Pandas 通常有多种方法可以做同样的事情,但我想知道 –
如果我尝试按特定列中的值对数据进行分组并计算具有该值的项目数,什么时候使用 df.groupby('colA').count()
有意义,什么时候使用df['colA'].value_counts()
?
有区别value_counts
return:
The resulting object will be in descending order so that the first element is the most frequently-occurring element.
但 count
不是,它按 index
排序输出(由 groupby('col')
中的列创建)。
df.groupby('colA').count()
用于通过函数 count.
聚合 df
的所有列,因此它计算不包括 NaN
s 的值。
所以如果需要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
Groupby
和value_counts
是完全不同的函数。您不能在数据帧上执行 value_counts。
Value Counts
仅限于单个列或系列,其唯一目的是 return 系列值的频率
Groupby
return是一个对象,因此可以对其进行统计计算。因此,当您执行 df.groupby(col).count()
时,它将 return 相对于 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 count is generally used for getting the valid number of values present in all the columns
with reference to
orwith respect to
one or more columns specified. So not a number (nan) will be excluded.
要使用 groupby 查找频率,您需要像@jez 那样针对指定的列本身进行聚合。 (也许是为了避免这种情况并使开发人员的生活更轻松 value_counts 已实施)。
值计数:
df['color'].value_counts()
r 3
g 2
b 2
Name: color, dtype: int64
Value count is generally used for finding the frequency of the values present in one particular column.
总结:
.groupby(col).count()
应在您想要查找相对于指定 col
的列中出现的有效值的频率时使用。
.value_counts()
应该用于查找系列的频率。
简而言之:.value_counts()
Return 包含 DataFrame 中 唯一行 计数的系列,这意味着它会计算特定的各个值行并报告列中有多少个值:
想象我们有一个像这样的数据框:
df = pd.DataFrame({'first_name': ['John', 'Anne', 'John', 'Beth'],
'middle_name': ['Smith', pd.NA, pd.NA, 'Louise']})
first_name middle_name
0 John Smith
1 Anne <NA>
2 John <NA>
3 Beth Louise
然后我们在上面应用value_counts:
df.value_counts()
first_name middle_name
Beth Louise 1
John Smith 1
dtype: int64
如您所见,它没有计算具有 NA 值的行。
但是 count()
计算每列或每行的 non-NA 个单元格。
在我们的示例中:
df.count()
first_name 4
middle_name 2
dtype: int64