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

使用Python Pandas计算两类警情的平均出警单元数比值

计算两类警情平均出警单元数的比值

核心思路

筛选出目标两类警情的记录,分别计算它们的出警单元数均值,最后求两者的比值。以下是针对大数据集的高效实现方案:

代码实现

1. 基础导入与数据读取

import pandas as pd

# 读取CSV文件,大文件添加low_memory=False避免类型推断警告
df = pd.read_csv('your_dataset.csv', low_memory=False)

2. 方法一:布尔索引(直观易读)

# 筛选两类警情并计算均值
mean_fire = df[df['警情类型(Types of Incidents)'] == '111 - Building fire']['出警单元数(Number of units)'].mean()
mean_smoke = df[df['警情类型(Types of Incidents)'] == '651 - Smoke scare, odor of smoke']['出警单元数(Number of units)'].mean()

# 计算比值
ratio = mean_fire / mean_smoke
print(f"比值结果: {ratio:.2f}")

3. 方法二:GroupBy分组(适合多警情分析场景)

如果后续需要分析更多警情类型,分组计算会更高效:

# 按警情类型分组,批量计算均值
incident_avg = df.groupby('警情类型(Types of Incidents)')['出警单元数(Number of units)'].mean()

# 提取目标警情的均值并计算比值
ratio = incident_avg['111 - Building fire'] / incident_avg['651 - Smoke scare, odor of smoke']
print(f"比值结果: {ratio:.2f}")

4. 大数据集优化:query方法(内存友好)

针对超大规模数据集,query()能减少中间内存占用:

# 注意列名含特殊字符,需用反引号包裹
mean_fire = df.query('`警情类型(Types of Incidents)` == "111 - Building fire"')['出警单元数(Number of units)'].mean()
mean_smoke = df.query('`警情类型(Types of Incidents)` == "651 - Smoke scare, odor of smoke"')['出警单元数(Number of units)'].mean()

ratio = mean_fire / mean_smoke
print(f"比值结果: {ratio:.2f}")

关键注意事项

  • 列名匹配:务必确认数据中的列名与代码完全一致(包括空格、中英文符号),可通过print(df.columns)查看列名列表。
  • 空值处理:如果出警单元数列存在空值,mean()默认会自动跳过;若需过滤空值后计算,可先执行df = df.dropna(subset=['出警单元数(Number of units)'])。
  • 字符串匹配:检查警情类型字符串是否完全匹配(比如有无多余空格、大小写差异),可通过df['警情类型(Types of Incidents)'].unique()查看所有唯一值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:25:17