分组内行对比:筛选排除与岗位基础收费一致的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()函数匹配对应岗位的基础费率再筛选:
- 新增辅助列(假设E列)计算对应岗位基础费率,公式:
=XLOOKUP(1, (A:A=A2)*(B:B=B2)*(ISBLANK(C:C)), D:D)(A为Region列、B为Position列、C为Specialty列、D为Charge列) - 新增过滤列判断是否保留:
=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
相关产品推荐
相关产品推荐

