使用PANDAS中的value_counts()零次出现/频率

时间:2018-07-25 13:30:45

标签: python pandas numpy

我有一个表格,其中包含日期和每个日期售出的各种汽车,格式如下(这些列中只有2列):

DATE       CAR
2012/01/01 BMW
2012/01/01 Mercedes Benz
2012/01/01 BMW
2012/01/02 Volvo
2012/01/02 BMW
2012/01/03 Mercedes Benz
...
2012/09/01 BMW
2012/09/02 Volvo

我执行以下操作以查找每天售出的宝马汽车数量

df[df.CAR==BMW]['DATE'].value_counts()

结果是这样的:

2012/07/04 15
2012/07/08 8
...
2012/01/02 1

但是有几天没有宝马汽车售出。结果,除了上述内容外,我还希望BMW零发生的日子。因此,理想的结果是:

2012/07/04 15
2012/07/08 8
...
2012/01/02 1
2012/01/09 0
2012/08/11 0

我该怎么做才能获得这样的结果?

2 个答案:

答案 0 :(得分:6)

您可以在value_counts之后重新索引结果,并用0填充缺失的值。

df.loc[df.CAR == 'BMW', 'DATE'].value_counts().reindex(df.DATE.unique(), fill_value=0)

输出:

2012/01/01    2
2012/01/02    1
2012/01/03    0
2012/09/01    1
2012/09/02    0
Name: DATE, dtype: int64

答案 1 :(得分:1)

类型category的默认行为正是您想要的。不存在的类别将显示为零。您只需要这样做:

df.astype({'CAR': 'category'})[df.CAR=='BMW']['DATE'].value_counts()

或更妙的是,明确地使其成为数据框中的类别:

df.CAR = df.CAR.astype('category')
df[df.CAR=='BMW'].DATE.value_counts()

类别类型可以更好地表示数据,并节省空间。