如何使用熊猫交叉表汇总年度犯罪计数?

时间:2019-04-18 17:09:54

标签: python pandas

我正在对芝加哥犯罪数据进行回归分析,并且希望对每个地区的年度犯罪计数进行汇总。我知道芝加哥的犯罪数据相当大,但可以通过公开访问了解这些数据。现在我做了这5年间每个地区的犯罪总数统计,但是我只是想知道每个地区的年度犯罪数,所以我只对排名前5位的犯罪感兴趣。

数据

以下是keggle上的芝加哥犯罪数据:chicago crime data

我做了什么

crimes_2012 = pd.read_csv('Chicago_Crimes_2012_to_2017.csv', sep=',', error_bad_lines=False)
crimes_2012.drop_duplicates(subset=['ID', 'Case Number', 'Date'], inplace=True)
crimes_2012.drop(['Unnamed: 0','Case Number','IUCR','FBI Code','Updated On',
                  'X Coordinate','Y Coordinate'], inplace = True, axis = 1)
crimes_2012 = crimes_2012.dropna(axis = 0, how = 'any')

这是我对每个地区的犯罪总数所做的工作:

df=crimes_2012[['Primary Type', 'Location Description', 'Community Area']]
crime_catg = df.groupby(['Community Name', 'Primary Type'])['Primary Type'].count().unstack()
crime_catg = crime_catg[['THEFT','BATTERY', 'CRIMINAL DAMAGE', 'NARCOTICS', 'ASSAULT']]

所需的输出

我想获得每个地区/社区区域每种犯罪类型的年度计数。像这样的东西:

enter image description here

有没有方便的方法可以轻松地做到这一点?我尝试了熊猫的交叉表,但实际上没有得到正确的输出。如何做到这一点?

1 个答案:

答案 0 :(得分:2)

这是创建所需交叉表的方法。几个陷阱,首先需要将列'Date'转换为日期时间类型。然后,我们将过滤crimes_2012框架的子集,以仅包含您对boolean indexingSeries.isin感兴趣的5种犯罪。

最后,创建crosstab并使用sort_index获得所需的形状。

crimes_2012['Date'] = pd.to_datetime(crimes_2012['Date'], format='%m/%d/%Y %H:%M:%S %p')

top_5_crimes = ['THEFT','BATTERY', 'CRIMINAL DAMAGE', 'NARCOTICS', 'ASSAULT']

df = crimes_2012[crimes_2012['Primary Type'].isin(top_5_crimes)]

df_cross = (pd.crosstab(index=df['Community Area'],
                        columns=[df['Date'].dt.year, df['Primary Type']])
            .sort_index(axis=1, level=[1, 0]))

然后,如果您需要展平列级别,请使用:

df_cross.columns = ['{} {}'.format(crime, year) for year, crime in df_cross.columns]

[出]

print(df_cross.head())

                ASSAULT 2012  ASSAULT 2013  ASSAULT 2014  ASSAULT 2015  \
Community Area                                                           
0.0                        0             0             0             0   
1.0                      340           303           257           234   
2.0                      254           225           201           166   
3.0                      244           277           210           233   
4.0                      124           111            85            99   

                ASSAULT 2016  BATTERY 2012  BATTERY 2013  BATTERY 2014  \
Community Area                                                           
0.0                        0             0             0             0   
1.0                      227           991           866           776   
2.0                      198           658           669           574   
3.0                      241           736           667           593   
4.0                       93           354           352           319   

                BATTERY 2015  BATTERY 2016  ...  NARCOTICS 2012  \
Community Area                              ...                   
0.0                        0             0  ...               0   
1.0                      666           724  ...             485   
2.0                      544           534  ...             230   
3.0                      661           653  ...             735   
4.0                      288           288  ...             111   

                NARCOTICS 2013  NARCOTICS 2014  NARCOTICS 2015  \
Community Area                                                   
0.0                          0               0               0   
1.0                        362             278             205   
2.0                        216             173             157   
3.0                        482             519             271   
4.0                         61             102              78   

                NARCOTICS 2016  THEFT 2012  THEFT 2013  THEFT 2014  \
Community Area                                                       
0.0                          0           0           0           0   
1.0                         79        1043        1004         811   
2.0                         79         976         991         794   
3.0                        100        1338        1134         952   
4.0                         36         691         689         507   

                THEFT 2015  THEFT 2016  
Community Area                          
0.0                      0           0  
1.0                    845         851  
2.0                    669         694  
3.0                    879         968  
4.0                    499         514