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

按列分组并按B/C/D优先级筛选行数据的技术需求

分组筛选指定优先级行问题

原始数据

C1C2C3
1A1000
1B2000
1C3000
1D4000
1E5000
2A1000
2D4000
2E5000
3A1000
3B2000
3D4000
3E5000

需求说明

按C1列分组,每组内优先筛选C2值为B的行;若该组无C2=B的行,则筛选C2值为C的行;若仍不存在,则筛选C2值为D的行。

预期结果

C1C2C3
1B2000
2D4000
3B2000

解决方案

SQL实现

通过给目标C2值分配优先级,利用窗口函数分组排序后取第一行:

WITH ranked_rows AS (
    SELECT 
        C1, C2, C3,
        ROW_NUMBER() OVER (
            PARTITION BY C1 
            ORDER BY CASE C2 
                WHEN 'B' THEN 1 
                WHEN 'C' THEN 2 
                WHEN 'D' THEN 3 
                ELSE 4 
            END
        ) AS rank_num
    FROM your_table_name
)
SELECT C1, C2, C3
FROM ranked_rows
WHERE rank_num = 1 AND C2 IN ('B', 'C', 'D');

Pandas实现

通过映射优先级值,分组筛选优先级最高的行:

import pandas as pd

# 构造数据(或从文件读取)
df = pd.DataFrame({
    'C1': [1,1,1,1,1,2,2,2,3,3,3,3],
    'C2': ['A','B','C','D','E','A','D','E','A','B','D','E'],
    'C3': [1000,2000,3000,4000,5000,1000,4000,5000,1000,2000,4000,5000]
})

# 定义优先级规则
priority_map = {'B': 1, 'C': 2, 'D': 3}
# 过滤出目标C2值并添加优先级列
filtered_df = df[df['C2'].isin(priority_map.keys())].assign(priority=lambda x: x['C2'].map(priority_map))
# 分组取每组优先级最小的行
result = filtered_df.groupby('C1').apply(lambda x: x[x['priority'] == x['priority'].min()]).reset_index(drop=True)
# 移除临时优先级列
result = result.drop(columns='priority')

print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:15:40