所以我的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:
按指数对年份进行排序,以便我们得到正确的年份顺序。
答案 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')
如果您希望按类别和年份分组:
df.groupby([df.index.year,'Category']).count()['IncidntNum'].plot(kind='bar')
让我们放弃一个好的措施:
df.groupby([df.index.year,'Category']).count()['IncidntNum'].unstack().plot(kind='bar')