Pandas DataFrame中按社区统计特定犯罪类型的计数问题
解决方案
核心思路
先统计每个社区中目标案件的数量,再补全所有12个社区(包括无目标案件的社区,计数设为0)。
方法一:筛选后分组计数+补全社区
# 1. 定义所有12个社区的列表(替换成你的实际社区名称列表) all_communities = ["社区1", "社区2", ..., "社区12"] # 2. 筛选出"OFFENSE INVOLVING CHILDREN"类型的案件 filtered_cases = df[df["Primary Type"] == "OFFENSE INVOLVING CHILDREN"] # 3. 按社区分组统计案件数 community_counts = filtered_cases.groupby("Community Area")["Primary Type"].count() # 4. 补全所有社区,缺失的社区计数填0,转成DataFrame result_df = community_counts.reindex(all_communities, fill_value=0).reset_index() # 5. 重命名列名 result_df.columns = ["Community Area", "Offense Involving Children Count"]
方法二:分组后直接条件求和
# 1. 定义所有12个社区的列表 all_communities = ["社区1", "社区2", ..., "社区12"] # 2. 分组后对每个社区计算目标案件的数量 community_counts = df.groupby("Community Area")["Primary Type"].apply( lambda col: (col == "OFFENSE INVOLVING CHILDREN").sum() ) # 3. 补全社区并整理成最终DataFrame result_df = community_counts.reindex(all_communities, fill_value=0).reset_index() result_df.columns = ["Community Area", "Offense Involving Children Count"]
关键提示
- 必须补全所有12个社区:如果直接分组计数,没有目标案件的社区会被排除,
reindex能确保这些社区也出现在结果里,计数设为0。 - 如果你的社区列表来自另一个DataFrame,可以用
pd.merge替代reindex,设置how="left"并填充0值即可。
内容的提问来源于stack exchange,提问作者slycooper
相关产品推荐
相关产品推荐

