何时适合使用df.value_counts()vs df.groupby('...')。count()?
我听说过Pandas经常有多种方法来做同样的事情,但我想知道 -何时适合使用df.value_counts()vs df.groupby('...')。count()?
如果我试图按特定列中的值对数据进行分组并计算具有该值的项目数价值,什么时候使用df.groupby('colA').count()
以及何时使用df['colA'].value_counts()
有意义?
有区别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
Groupby
和value_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 to
或with 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()
应该用来找出一系列的频率。