如何对多层索引DataFrame分组取Top2并合并其余项为Other
Pandas 分组取Top2行业并合并剩余项为Other实现方案
直接按如下步骤实现即可,输出结构完全匹配预期:
- 基于已有的分组计数结果做二次分组处理,不需要重构原始统计逻辑
- 每个国家分组内先按计数降序排序,保留前2位行业,剩余行业计数求和合并为Other项
- 最终输出保留原有的多层索引结构,和预期格式完全一致
完整可运行代码
# 生成基础的国家-行业维度计数,和原有逻辑一致 sector_count = df.groupby(["Country", "Sector"]).size() # 定义单个国家分组的处理规则 def process_single_country(group): # 组内按行业计数从高到低排序 sorted_group = group.sort_values(ascending=False) # 截取排名前2的行业 top2_sectors = sorted_group.head(2) # 计算剩余所有行业的计数总和 other_sum = sorted_group.iloc[2:].sum() # 存在剩余行业时追加Other条目,避免生成值为0的无效项 if other_sum > 0: top2_sectors["Other"] = other_sum return top2_sectors # 按国家维度分组应用处理规则,保留多层索引 final_result = sector_count.groupby(level="Country", group_keys=False).apply(process_single_country)
运行结果
打印final_result即可得到目标输出:
Country Sector AU Telecom 3 Semiconductor 2 Other 1 SE Semiconductor 3 Telecom 2 Other 1 dtype: int64
如果后续需要调整保留的头部行业数量,直接修改head(2)中的数值即可,其余逻辑无需改动。
内容的提问来源于stack exchange,提问作者user2629628
相关产品推荐
相关产品推荐

