Pandas按年统计40岁以下事故伤残、死亡、轻伤数并合并表方法
你现有代码里统计轻伤的筛选条件有误,目前写的是判断Degree_injury == 'death',需要修正为Degree_injury == 'minor_injury',否则轻伤统计结果会和死亡人数一致。
方案1:直接合并你已生成的三个统计结果
你已经生成的num_disability、num_death、num_minor_injury都是以Year为索引的Series,用pd.concat即可直接合并:
import pandas as pd # 按列合并三个Series,同时指定列名,缺失值填充为0后转成整数类型 summary_df = pd.concat( [num_disability, num_death, num_minor_injury], axis=1, keys=['伤残人数', '死亡人数', '轻伤人数'] ).fillna(0).astype(int) # 如果你需要把Year从索引转为普通列,再加一行代码即可 # summary_df = summary_df.reset_index()
方案2:更高效的一次性统计实现(推荐)
不需要拆分三次过滤分组,一次性过滤后直接统计,代码更简洁性能更好:
import pandas as pd # 先过滤出年龄<40的记录 df_under40 = df[df['Age'] < 40] # 按年份分组,统计三类伤情的数量 summary_df = df_under40.groupby('Year')['Degree_injury'].value_counts().unstack().fillna(0)[ ['disability', 'death', 'minor_injury'] ].rename(columns={ 'disability': '伤残人数', 'death': '死亡人数', 'minor_injury': '轻伤人数' }).astype(int)
运行后得到的summary_df就是你需要的按年份汇总的统计表格。
内容的提问来源于stack exchange,提问作者Eng_GR
相关产品推荐
相关产品推荐

