value_counts()返回Pandas中“分类”数据类型的已删除/过滤数据

nzkunb0c  于 2023-01-04  发布在  其他
关注(0)|答案(1)|浏览(130)

有人能澄清一下吗:

df = pd.DataFrame({'years': [2015, 2016, 2017,2017, 2018, 2019, 2019, 2020]})
df['years'] = df['years'].astype('category')

print(df.dtypes)
years    category
dtype: object

现在,我创建了一个新变量来作为years列的子集:

subset_years = [2015, 2016, 2017, 2018]

然后过滤years

subset_df = df[df['years'].isin(subset_years)]
print(subset_df)

   years
0   2015
1   2016
2   2017
3   2017
4   2018

现在,我把独特的元素:

subset_df.years.unique()

我得到:

[2015, 2016, 2017, 2018]
Categories (4, int64): [2015, 2016, 2017, 2018]

但是如果我用subset_df.years.value_counts()计算,我会得到:

2015    1
2016    1
2017    2
2018    1
2019    0
2020    0
Name: years, dtype: int64

我的问题是,为什么subset_df.years.value_counts()返回20192020年,并且计数为0?因为我已经过滤了years ......在子集/过滤期间,它不应该删除那些years吗?
有人能解释一下发生了什么吗?

6rqinv9w

6rqinv9w1#

这是因为20192020仍然在类别中。如果您不希望筛选后的年份显示,可以在value_counts之前重置类别:

subset_df.years.cat.set_categories(subset_years).value_counts()
#2017    2
#2015    1
#2016    1
#2018    1
#Name: years, dtype: int64

相关问题