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

分组内行对比:筛选排除与岗位基础收费一致的specialty数据的方法咨询

方案1:直接过滤掉与基础收费相等的Specialty数据(满足核心需求)

SQL 场景

用窗口函数FIRST_VALUE()即可实现,逻辑为按Region、Position分组,优先取Specialty为null行的Charge作为岗位基础费率,再过滤掉非null Specialty且Charge等于基础费率的行:

WITH base_cal AS (
    SELECT 
        *,
        FIRST_VALUE(Charge) OVER (
            PARTITION BY Region, Position 
            ORDER BY CASE WHEN Specialty IS NULL THEN 0 ELSE 1 END
        ) AS position_base_charge
    FROM 你的表名
)
SELECT Region, Position, Specialty, Charge
FROM base_cal
WHERE NOT (Charge = position_base_charge AND Specialty IS NOT NULL)

Excel/Google Sheets 场景

用XLOOKUP()函数匹配对应岗位的基础费率再筛选:

  1. 新增辅助列(假设E列)计算对应岗位基础费率,公式:=XLOOKUP(1, (A:A=A2)*(B:B=B2)*(ISBLANK(C:C)), D:D)(A为Region列、B为Position列、C为Specialty列、D为Charge列)
  2. 新增过滤列判断是否保留:=IF(AND(D2=E2, NOT(ISBLANK(C2))), "排除", "保留"),筛选保留行即可

Python Pandas 场景

用groupby()+transform()组合实现:

import pandas as pd
import numpy as np
# 统一处理Specialty的空值标识
df['Specialty'] = df['Specialty'].replace('null', pd.NA)
# 提取每个岗位的基础费率
df['position_base_charge'] = df.groupby(['Region', 'Position'])['Charge'].transform('first')
# 过滤符合要求的行
df_filtered = df[~((df['Charge'] == df['position_base_charge']) & df['Specialty'].notna())]

方案2:新增列标注是否与基础费率一致(替代方案)

不需要过滤行,直接在原表新增标注列即可,完全满足不分组、保留所有Specialty行的要求:

  • SQL新增字段:CASE WHEN Charge = position_base_charge AND Specialty IS NOT NULL THEN '与基础费率一致' ELSE '与基础费率不一致' END AS charge_match_flag
  • Excel新增列公式:=IF(AND(D2=E2, NOT(ISBLANK(C2))), "与基础费率一致", "与基础费率不一致")
  • Pandas新增列:df['charge_match_flag'] = np.where((df['Charge'] == df['position_base_charge']) & df['Specialty'].notna(), "与基础费率一致", "与基础费率不一致")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 07:36:01