Oll*_*ani 15 python dataframe pandas pandas-groupby
我听说熊猫经常有多种方法可以做同样的事情,但我想知道 -
如果我尝试按特定列中的值对数据进行分组并计算具有该值的项目数,则何时使用df.groupby('colA').count()
以及何时使用有意义df['colA'].value_counts()
?
Flo*_*oor 17
Groupby
并且value_counts
是完全不同的功能.您无法在数据框上执行value_counts.
Value Counts
仅限于单个列或系列,其唯一目的是返回值的一系列频率
Groupby
返回一个对象,以便可以对其执行统计计算.因此,当您执行df.groupby(col).count()
此操作时,将返回与specific columns
groupby相关的列中存在的真值的数量.
应该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]})
Run Code Online (Sandbox Code Playgroud)
分组数:
df.groupby('color').count()
id size
color
b 2 2
g 2 2
r 3 3
Run Code Online (Sandbox Code Playgroud)
Groupby计数通常用于获取所有列
with reference to
或with respect to
指定的一个或多个列中存在的有效值数.所以不会排除数字(nan).
要使用groupby查找频率,您需要像@jez那样聚合指定的列本身.(也许是为了避免这种情况并使开发人员生活变得轻松实现value_counts).
价值计数:
df['color'].value_counts()
r 3
g 2
b 2
Name: color, dtype: int64
Run Code Online (Sandbox Code Playgroud)
值计数通常用于查找一个特定列中存在的值的频率.
结论 :
.groupby(col).count()
当您想要查找相对于指定列的列中存在的有效值的频率时,应使用此值col
.
.value_counts()
应该用来查找一系列的频率.
jez*_*ael 15
有差异value_counts
回报:
生成的对象将按降序排列,以便第一个元素是最常出现的元素.
但count
不是,它按输出排序index
(由列创建groupby('col')
).
df.groupby('colA').count()
Run Code Online (Sandbox Code Playgroud)
用于聚合df
by函数的所有列count.
所以它计算除NaN
s 之外的值.
因此,如果count
只需要一列需要:
df.groupby('colA')['colA'].count()
Run Code Online (Sandbox Code Playgroud)
样品:
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
Run Code Online (Sandbox Code Playgroud)