如何在同一DataFrame中合并两列数据生成总受伤人数列?
希腊空难数据合并受伤列及可视化方案
需求说明
处理2000-2020年希腊空难事件数据,已筛选得到包含Year、fatal_injuries、minor_injuries、serious_injuries、all_incidents列的DataFrame,需要将minor_injuries(轻伤)和serious_injuries(重伤)合并为total_injuries(总受伤人数)列,后续绘制受伤人数最多年份的统计图表。
修正并完善后的代码
import pandas as pd import matplotlib.pyplot as plt # 读取数据并设置显示所有行 pd.set_option('display.max_rows', None) df = pd.read_csv('all_incidents_cleaned.csv') # 从事件日期提取年份 df['Year'] = pd.to_datetime(df.incident_date).dt.year # 按年份分组,统计各伤害类型的事件数量 fatalities = df.groupby('Year').fatalities.value_counts().unstack().reset_index() # 计算年度总事件数 fatalities['all_incidents'] = fatalities[['Θανάσιμος τραυματισμός', 'Μικρός τραυματισμός','Σοβαρός τραυματισμός', 'Χωρίς Τραυματισμό']].sum(axis=1) # 将希腊语列名改为英文 fatalities.rename(columns = { 'Θανάσιμος τραυματισμός':'fatal_injuries', 'Μικρός τραυματισμός':'minor_injuries', 'Σοβαρός τραυματισμός':'serious_injuries', 'Χωρίς Τραυματισμό':'no_injuries' }, inplace = True) # 合并轻伤和重伤列为总受伤人数 fatalities['total_injuries'] = fatalities['minor_injuries'] + fatalities['serious_injuries'] # 定位受伤人数最多的年份 max_injury_row = fatalities.loc[fatalities['total_injuries'].idxmax()] print(f"受伤人数最多的年份:{max_injury_row['Year']},总受伤人数:{max_injury_row['total_injuries']}") # 绘制年度总受伤人数柱状图 plt.figure(figsize=(12,6)) plt.bar(fatalities['Year'], fatalities['total_injuries'], color='skyblue') # 标记最大值点 plt.text(max_injury_row['Year'], max_injury_row['total_injuries'] + 0.5, f"{max_injury_row['total_injuries']}", ha='center', color='red', fontweight='bold') plt.title('2000-2020年希腊空难年度总受伤人数统计') plt.xlabel('年份') plt.ylabel('总受伤人数') plt.xticks(rotation=45) plt.tight_layout() plt.show()
关键步骤说明
- 合并列:直接通过列相加生成
total_injuries,若原列存在缺失值,可添加.fillna(0)确保数值计算正常(如fatalities['minor_injuries'].fillna(0)) - 最大值定位:用
idxmax()获取总受伤人数最大的行索引,快速提取对应年份和数值 - 可视化:用柱状图直观展示各年份受伤数据,通过文本标记突出最大值,满足作业的图表展示需求
内容的提问来源于stack exchange,提问作者Airin
相关产品推荐
相关产品推荐

