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

如何对pandas DataFrame数据按年龄区间分组以统计道路事故高发年龄段

问题解决方法

问题根源

  • 年龄字段V1_Edad为字符串类型,即使删除了明显非数值的行,也无法直接参与数值区间计算
  • 仅定义了分箱规则(bins、labels),未实际将分箱规则应用到数据集上
  • 原代码的分组逻辑是按单个年龄值计数,不是按自定义的年龄区间聚合

优化后完整代码

import pandas as pd
import matplotlib.pyplot as plt

# 1. 数据清洗:转换为数值类型,过滤无效值
# 将非数值内容转为NaN,删除NaN行,过滤年龄超过120的异常值
mty['V1_Edad'] = pd.to_numeric(mty['V1_Edad'], errors='coerce')
mty = mty.dropna(subset=['V1_Edad'])
mty = mty[(mty['V1_Edad'] >= 0) & (mty['V1_Edad'] <= 120)]

# 2. 按自定义区间分箱
bins = [-1,15,40,60,80]
labels = ['0-15', '16-40', '41-60', '61-80']
mty['age_group'] = pd.cut(mty['V1_Edad'], bins=bins, labels=labels)

# 3. 统计各年龄区间事故数量
age_accident_count = mty['age_group'].value_counts().sort_index()
print(age_accident_count)
# 输出发生率最高的年龄段
print(f"事故发生率最高的年龄段为:{age_accident_count.idxmax()},事故数为:{age_accident_count.max()}")

# 4. 可视化
plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文显示问题
plt.bar(age_accident_count.index, age_accident_count.values)
plt.xlabel('年龄区间')
plt.ylabel('事故发生数量')
plt.title('各年龄区间道路事故发生数统计')
plt.show()

代码说明

  • pd.to_numeric的errors='coerce'参数会自动将无法转为数值的内容(比如之前残留的42|、sd等)转为空值,后续直接删除即可,不用手动筛选非数值行
  • pd.cut是pandas专门用来做数值区间分箱的函数,会自动将每个年龄匹配到你定义的区间中,生成对应的分组标签
  • 最终统计结果age_accident_count就是每个年龄区间对应的事故总数,可直接用于后续分析和绘图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:45:03