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

如何在Pandas中按类别优先级筛选后对列求和(无需拆分DataFrame)

解决方案

可以直接用Pandas的分组排序+聚合逻辑实现,无需拆分DataFrame,核心思路是按地区分组后,根据flag优先级筛选出每个地区的有效数据,再求和。

步骤说明

  1. 定义优先级映射:将不同类型的flag按优先级赋值,高优先级对应更小的数值(比如official优先级最高,赋值0;estimate次之,赋值1;以此类推)。
  2. 分组筛选有效数据:按Area分组,每组内按优先级排序,保留优先级最高的那一行数据。
  3. 求和计算:对筛选后的生产值列求和。

代码实现

先构造示例数据:

import pandas as pd

data = {
    'Area': ['France', 'USA', 'Germany', 'Germany'],
    'Y2017': [10, 11, 12, 10],
    'Y2017flags': ['official', 'estimate', 'official', 'estimate']
}
df = pd.DataFrame(data)

常规写法(新增优先级列)

# 定义优先级规则
priority_map = {'official': 0, 'estimate': 1, 'unofficial': 2}

# 添加优先级辅助列
df['priority'] = df['Y2017flags'].map(priority_map)

# 按Area分组,每组按优先级升序排序后取第一行(优先级最高的记录)
selected_records = df.sort_values('priority').groupby('Area').first()

# 计算总和
total_production = selected_records['Y2017'].sum()
print(total_production)  # 输出结果:33

简化写法(无需辅助列)

可以直接在排序时使用key参数,省去新增列的步骤:

priority_map = {'official': 0, 'estimate': 1, 'unofficial': 2}

# 按优先级排序后分组取每个地区的有效生产值
valid_values = df.sort_values(
    by='Y2017flags',
    key=lambda col: col.map(priority_map)
).groupby('Area')['Y2017'].first()

# 求和
total_production = valid_values.sum()
print(total_production)

这种方法全程基于原DataFrame操作,没有拆分或复制数据,高效且符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:45:28