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

按Client分组,依据Status优先级分配主状态的技术需求

按Client分组并基于Status优先级分配主状态

需求说明

  • 按Client字段对数据分组
  • 为每个分组分配主状态,优先级规则如下:
    • 若组内存在Status 1,则主状态为Status 1(优先级最高)
    • 若不存在Status 1但存在Status 2,则主状态为Status 2
    • 以此类推,Status 4为最低优先级

示例数据

ClientPurchaseStatus
Client 1Purchase 1Status 1
Client 1Purchase 2Status 2
Client 1Purchase 3Status 1
Client 2Purchase 4Status 2
Client 2Purchase 5Status 3
Client 3Purchase 4Status 1
Client 3Purchase 5Status 4

期望结果

ClientMain Status
Client 1Status 1
Client 2Status 2
Client 3Status 1

实现方案

方案1:Python Pandas

通过提取Status中的数字作为优先级,分组后取每组优先级最高(数字最小)的状态:

import pandas as pd

# 构造示例数据
data = {
    'Client': ['Client 1', 'Client 1', 'Client 1', 'Client 2', 'Client 2', 'Client 3', 'Client 3'],
    'Purchase': ['Purchase 1', 'Purchase 2', 'Purchase 3', 'Purchase 4', 'Purchase 5', 'Purchase 4', 'Purchase 5'],
    'Status': ['Status 1', 'Status 2', 'Status 1', 'Status 2', 'Status 3', 'Status 1', 'Status 4']
}
df = pd.DataFrame(data)

# 提取Status里的数字作为优先级值
df['Priority'] = df['Status'].str.extract('(\d+)').astype(int)

# 分组后取每组优先级最小的Status作为主状态
result = df.groupby('Client').apply(
    lambda group: group.loc[group['Priority'].idxmin(), 'Status']
).reset_index(name='Main Status')

print(result)

运行后输出结果与期望结果完全一致。

方案2:SQL

利用窗口函数按Client分组,对Status的数字排序后取第一条记录:

WITH ranked_status AS (
    SELECT 
        Client,
        Status,
        -- 提取Status中的数字并排序,数字越小优先级越高
        ROW_NUMBER() OVER (
            PARTITION BY Client 
            ORDER BY CAST(SUBSTRING(Status, CHARINDEX(' ', Status) + 1) AS INT) ASC
        ) AS rn
    FROM your_table_name
)
SELECT Client, Status AS "Main Status"
FROM ranked_status
WHERE rn = 1;

替换your_table_name为实际表名即可执行,返回结果符合需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 05:50:19