You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于value_counts()创建2012-2017年犯罪数量统计DataFrame

解决年份犯罪次数统计的问题

我来帮你搞定这个需求,先拆解下你现有代码的小问题,再给你两种完善的实现方案:

现有代码的问题点

  • 你用pd.DataFrame(df_1.year.value_counts(), columns=["Year", "AggregateCrime"])的时候,value_counts()返回的是一个索引为年份、值为犯罪次数的Series。直接转DataFrame时,年份会变成行索引,而你指定的["Year", "AggregateCrime"]列会导致Year列全是NaN(因为原Series没有这个字段),这不符合预期。
  • sort_index(axis = 0, ascending=...)这里需要明确填True,才能让年份按升序(2012→2017)排列。
  • 另外,原代码可能会漏掉2012-2017中没有犯罪记录的年份,如果你需要这些年份也显示统计值0,就得额外处理。

方案1:基础版(仅统计有犯罪记录的年份)

这个方案适合只需要统计数据中存在的年份,步骤如下:

import pandas as pd

# 1. 统计各年份犯罪次数,同时重置索引把年份从索引转为列
crime_year = df_1['Year'].value_counts().reset_index()
# 2. 设置正确的列名
crime_year.columns = ['Year', 'AggregateCrime']
# 3. 按年份升序排序
crime_year = crime_year.sort_values(by='Year', ascending=True)

方案2:进阶版(补全2012-2017所有年份)

如果需要确保2012到2017的每一年都出现在结果里(哪怕某一年没有犯罪,显示0次),可以用reindex来补全年份:

import pandas as pd

# 1. 统计各年份犯罪次数
year_counts = df_1['Year'].value_counts()
# 2. 创建包含2012-2017所有年份的索引对象
all_target_years = pd.Index(range(2012, 2018), name='Year')
# 3. 重新索引,缺失年份填充0,再重置索引转为标准DataFrame
crime_year = year_counts.reindex(all_target_years, fill_value=0).reset_index()
# 4. 设置列名
crime_year.columns = ['Year', 'AggregateCrime']

这样处理后,哪怕2012年没有犯罪记录,结果里也会有一行2012, 0,完美覆盖你要的时间范围。

内容的提问来源于stack exchange,提问作者anandg112

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:54:20