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

技术问询:基于首字符求最大值及根据子公司状态生成母公司最高状态列

解决方案:基于首字符求最大值与母公司状态列生成

针对你提出的两个数据处理需求,我整理了不同工具下的实现方案,结合示例数据详细说明:


需求1:在给定条件下,基于首字符求最大值

核心是先提取目标字段的首字符(转为可比较类型),再在指定范围内计算最大值。以下是常用工具的实现方式:

Excel 实现

  • 若首字符为数字,直接提取转数值后求最大值:

    =MAX(--LEFT(目标列, 1))
    

    (--用于将提取的字符转为数值,确保能正确计算最大值)

  • 若首字符为字母,先转ASCII码求最大值再转回字母:

    =CHAR(MAX(CODE(LEFT(目标列, 1))))
    
  • 按首字符分组求对应数值的最大值(假设A列是带首字符的编码,B列是数值):

    =MAXIFS(B:B, A:A, LEFT(A2, 1)&"*")
    

Python Pandas 实现

import pandas as pd

# 示例数据集
df = pd.DataFrame({
    'Code': ['AA11', 'VB12', 'XB11', 'AA12', 'BB13'],
    'Value': [10, 20, 15, 25, 30]
})

# 提取首字符
df['First_Char'] = df['Code'].str[0]

# 方案1:按首字符分组求Value的最大值
max_grouped = df.groupby('First_Char')['Value'].max().reset_index()
print("按首字符分组的最大值:\n", max_grouped)

# 方案2:求首字符本身的最大值(字母按字典序)
max_char = df['First_Char'].max()
print(f"\n首字符最大值:{max_char}")

SQL 实现

-- 按首字符分组求数值最大值
SELECT 
    LEFT(Code, 1) AS First_Char,
    MAX(Value) AS Max_Value
FROM your_table
GROUP BY LEFT(Code, 1);

-- 求首字符本身的最大值
SELECT MAX(LEFT(Code, 1)) AS Max_First_Char
FROM your_table;

需求2:生成「Parent Status」列(母公司状态取子公司最高级别)

首先明确状态级别规则:1-Start < 2-Mid < 3-Complete,即通过状态字符串的首数字判断级别,数字越大级别越高。以下是结合示例数据的实现:

示例数据回顾

Sub StatusParentParent Status
1-StartAA2-Mid
1-StartBB3-Complete
1-StartCC1-Start
2-MidAA2-Mid
1-StartAA2-Mid
2-MidBB3-Complete
3-CompleteBB3-Complete
1-StartDD2-Mid
2-MidDD2-Mid

Excel 实现

假设数据在A2:D10区域,Parent列在C列,Sub Status在B列:

  • Excel 365/2021(动态数组):在D2单元格输入公式,自动填充整列

    =XLOOKUP(MAX(--LEFT(FILTER(B:B,C:C=C2),1)),--LEFT(FILTER(B:B,C:C=C2),1),FILTER(B:B,C:C=C2))
    

    逻辑:筛选当前母公司的所有子公司状态→提取首数字转数值→找到最大值→匹配对应完整状态文本

  • 旧版Excel(数组公式):输入后按Ctrl+Shift+Enter触发数组计算

    =INDEX(B:B,MATCH(MAX(IF(C:C=C2,--LEFT(B:B,1))),IF(C:C=C2,--LEFT(B:B,1)),0))
    

Python Pandas 实现

import pandas as pd

# 加载示例数据
data = {
    'Sub': ['AA11', 'VB12', 'XB11', 'AA12', 'AA13', 'BB13', 'RW11', 'FX22', 'TF11'],
    'Sub Status': ['1-Start', '1-Start', '1-Start', '2-Mid', '1-Start', '2-Mid', '3-Complete', '1-Start', '2-Mid'],
    'Parent': ['AA', 'BB', 'CC', 'AA', 'AA', 'BB', 'BB', 'DD', 'DD']
}
df = pd.DataFrame(data)

# 提取状态级别数字
df['Status_Level'] = df['Sub Status'].str.extract('(\d+)').astype(int)

# 按Parent分组,找到最高级别对应的状态
parent_status_map = df.groupby('Parent').apply(
    lambda x: x.loc[x['Status_Level'].idxmax(), 'Sub Status']
).to_dict()

# 生成Parent Status列
df['Parent Status'] = df['Parent'].map(parent_status_map)

print("处理后的数据:\n", df)

SQL 实现

使用窗口函数标记每个母公司的最高级别状态,再关联生成结果:

WITH ranked_status AS (
    SELECT 
        *,
        ROW_NUMBER() OVER (
            PARTITION BY Parent 
            ORDER BY CAST(SUBSTRING("Sub Status", 1, 1) AS INT) DESC
        ) AS rn
    FROM company_status
)
SELECT 
    rs.Sub,
    rs."Sub Status",
    rs.Parent,
    (SELECT "Sub Status" FROM ranked_status WHERE Parent = rs.Parent AND rn = 1) AS "Parent Status"
FROM ranked_status rs;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:58:41