如何用Pandas计算各国家-年度单位的每起袭击致死人数中位数?
计算国家-年度维度下恐怖袭击致死人数中位数的解决方案
你可以直接用groupby的agg()方法,一次性完成求和与中位数计算,不用分开处理。修改后的代码如下:
# 按国家-年份分组,同时计算所需的聚合指标 df2 = df1.groupby(['country', 'iyear']).agg( totalnkill=('nkill', 'sum'), NumbAttackperYear=('NumbAttack', 'sum'), MedKillperAttack=('nkill', 'median') ).reset_index()
代码解释:
groupby(['country', 'iyear']):指定按country(国家)和iyear(年份)两个字段分组,确保聚合逻辑严格落在国家-年度维度上。agg():聚合方法,支持同时对不同列应用不同的聚合规则,格式为新列名=(原列名, 聚合函数):totalnkill=('nkill', 'sum'):对nkill列求和,得到该国家该年度的总致死人数,存入totalnkill列。NumbAttackperYear=('NumbAttack', 'sum'):对NumbAttack列求和,得到该国家该年度的总袭击次数,存入NumbAttackperYear列。MedKillperAttack=('nkill', 'median'):对nkill列计算中位数,得到该国家该年度每起袭击的致死人数中位数,存入MedKillperAttack列。
reset_index():把分组用的country和iyear从索引转为普通列,让df2的结构完全匹配你的需求(包含country、iyear、totalnkill、NumbAttackperYear、MedKillperAttack列)。
补充说明:
如果nkill列存在缺失值(比如NaN),默认计算中位数时会自动跳过缺失值;若需要显式声明,可写成('nkill', lambda x: x.median(skipna=True))。
内容的提问来源于stack exchange,提问作者taraamcl
相关产品推荐
相关产品推荐

