获得每年出现的次数

时间:2017-02-18 12:38:44

标签: python csv pandas

所以我的CSV看起来像这样:

          IncidntNum     Category      Date                    
1         150098210        ROBBERY     02/03/2011 12:00:00 AM             
2         150098210        ASSAULT     07/05/2013 12:00:00 AM
4         150098226      VANDALISM     12/01/2015 12:00:00 AM
7         150098248      VANDALISM     04/06/2015 12:00:00 AM

我有兴趣弄清楚某一罪行每年发生多少次,所以我会这样做。能够为每种类型的犯罪制作图表,显示每年犯罪发生的次数。我该怎么做呢?为了实现这一目标,我有点迷失方向。

到目前为止,我已经导入了CSV文件并绘制了简单发生的犯罪数量,并将其绘制在显示每种犯罪类型的图表上。

with open("file.csv", 'r') as f:
    data = pd.read_csv(f)

    crimes = data.loc[data['Category'] == x]
    crimes_dates = crimes['Date']
    crimes_year = crimes_dates.apply(lambda x: x[6:10]).value_counts().sort_index()
    unique_crimes_years = crimes_year.value_counts()
    unique_crimes_years.plot(kind='bar')
    plt.ylabel("Crimes count")
    plt.show()

哪一切都很好,但是我希望能够挑选出某种犯罪并描绘每年犯罪发生的次数。

crimes = data.loc[data['Category'] == 'VANDALISM'

这会让我得到一个类似于data的新数据框架,但只有&#39; VANDALISM&#39;,但是我对于如何相对于年份绘制它有点困惑?< / p>

编辑:

正如亨利所建议的,已经添加了年份,然后按年计算,并尝试绘制。

编辑2:

按指数对年份进行排序,以便我们得到正确的年份顺序。

1 个答案:

答案 0 :(得分:2)

您希望在将日期作为索引时使用groupby并进行计数:

df['Date']=pd.to_datetime(df['Date'])
df.set_index('Date')
df.groupby(df.index.year).count()

停止

      IncidntNum  Category
2011           1         1
2013           1         1
2015           2         2

简介:

df.groupby(df.index.year).count()['IncidntNum'].plot(kind='bar')

enter image description here

如果您希望按类别和年份分组:

df.groupby([df.index.year,'Category']).count()['IncidntNum'].plot(kind='bar')

enter image description here

让我们放弃一个好的措施:

df.groupby([df.index.year,'Category']).count()['IncidntNum'].unstack().plot(kind='bar')

enter image description here