Python 如何使用pandas获取数据帧中具有特定值的列计数?

Python 如何使用pandas获取数据帧中具有特定值的列计数?,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个专栏 Sales Close_Date 0 04/01/12 0 33496 12/01/12 588 05/01/12 9240 10/01/12 如何找出“0”或“9296”的数字或“Sales”列中存在的任何其他值?如果需要计算一个值,则最简单的是布尔掩码的总和真值值: print (df.Sales == 0) 0 True 1 True 2 False 3 False 4 False Name: Sal

我有两个专栏

Sales   Close_Date
0       04/01/12
0   
33496   12/01/12
588     05/01/12
9240    10/01/12

如何找出“0”或“9296”的数字或“Sales”列中存在的任何其他值?

如果需要计算一个值,则最简单的是布尔掩码的总和
真值
值:

print (df.Sales == 0)
0     True
1     True
2    False
3    False
4    False
Name: Sales, dtype: bool


a = (df.Sales == 0).sum()
print (a)
2
如果需要计算所有值,则需要并聚合或使用:

或:


使用或在需要时使用过滤器:

df = df.query('Sales == 0')
print (df)
   Sales Close_Date
0      0   04/01/12
1      0        NaN
或:

计时

#[500000 rows x 2 columns]
df = pd.concat([df]*100000).reset_index(drop=True)
print (df)

In [37]: %timeit ((df.Sales == 0).sum())
The slowest run took 4.18 times longer than the fastest. This could mean that an intermediate result is being cached.
100 loops, best of 3: 4.62 ms per loop

In [38]: %timeit (Counter(df.Sales)[0])
10 loops, best of 3: 82.4 ms per loop
但这可以更快:

a = (df.Sales.value == 0).sum()

…我正在寻找这个解决方案a=(df.Sales==0)。sum()打印(a)2。但是它只适用于整数值,如果列包含字符串值,那么如何获取计数。它只需要添加
'
a=(df.Sales='value')。sum()
我认为pandas中的
计数器
解决方案非常慢,请检查我的计时。@Sidhartha
sum
作用于布尔数组。这将适当地处理它。我认为这个解决方案在更大的df中非常缓慢:(@Sidhartha我添加此解决方案是为了展示python的广度。但几乎可以肯定的是,jezrael提供的答案更快。更不用说他的答案信息量更大。此外,所有人都会对其他人已经投入精力并对其有帮助的答案表示感谢。
df = df[df.Sales == 0]
print (df)
   Sales Close_Date
0      0   04/01/12
1      0        NaN
#[500000 rows x 2 columns]
df = pd.concat([df]*100000).reset_index(drop=True)
print (df)

In [37]: %timeit ((df.Sales == 0).sum())
The slowest run took 4.18 times longer than the fastest. This could mean that an intermediate result is being cached.
100 loops, best of 3: 4.62 ms per loop

In [38]: %timeit (Counter(df.Sales)[0])
10 loops, best of 3: 82.4 ms per loop
a = (df.Sales.value == 0).sum()
from collections import Counter

c = Counter(df.Sales)
c[0]

2