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

如何用Python Pandas获取2010年事故Top3区域?代码输出异常求助

修正方案

原代码问题分析

  1. 错误将Date列当作DataFrame索引处理(df.index.year),但实际Date是普通字符串格式列,无法直接提取年份。
  2. 直接对Accident列调用nlargest,仅会返回Accident字段的Yes/No条目,无法统计每个区域的事故总数。

修正步骤及代码

第一步:转换日期格式并筛选2010年事故记录

先把Date列转为datetime类型,方便提取年份,同时筛选出2010年且发生事故的记录:

# 转换Date列为datetime类型,匹配日/月/年的格式
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')
# 筛选2010年且事故状态为Yes的记录
filtered_df = df[(df['Date'].dt.year == 2010) & (df['Accident'] == 'Yes')]

第二步:统计区域事故数并排序取前3

按Area分组统计事故次数,降序排序后提取前3个区域:

# 分组统计每个区域的事故总数
accident_count = filtered_df.groupby('Area').size().sort_values(ascending=False)
# 提取前3个区域的名称
top_3_areas = accident_count.head(3).index.tolist()

第三步:按要求输出结果

遍历列表,每行输出一个区域名称:

for area in top_3_areas:
    print(area)

完整可运行代码

import pandas as pd

# 模拟原始数据(实际使用时替换为你的5万条数据)
df = pd.DataFrame({
    'Area': ['Wendly', 'Wendly', 'Reet', 'Reet', 'Sarall', 'Sarall', 'Sarall'],
    'Date': ['8/8/2010', '2/9/2010', '1/5/2010', '9/11/2010', '14/3/2010', '7/6/2010', '23/6/2014'],
    'SpeedOver': [15, 35, 65, 10, 18, 23, 25],
    'Risk': ['L', 'L', 'M', 'M', 'M', 'H', 'H'],
    'Accident': ['No', 'Yes', 'Yes', 'Yes', 'No', 'No', 'Yes']
})

# 转换日期格式
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')
# 筛选目标记录
filtered_df = df[(df['Date'].dt.year == 2010) & (df['Accident'] == 'Yes')]
# 统计排序取前3
accident_count = filtered_df.groupby('Area').size().sort_values(ascending=False)
top_3_areas = accident_count.head(3).index.tolist()
# 输出结果
for area in top_3_areas:
    print(area)

最终输出

Reet
Wendly
Sarall

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:55:16