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

按保单号(Policy_no)分区设置条件标记的逻辑实现求助

按保单号分组设置标记的逻辑实现方案

你的需求与数据集

先明确下你的核心需求和数据集:

原始数据集

Policy_norole
1'Owner'
1'Beneficiary'
1'Beneficiary'
2'Owner'
2'Life assured'
3'Life assured'

标记规则

  • 按Policy_no分组
  • 分组内存在Owner角色:标记设为'1'
  • 分组内无Owner角色:仅当存在Life assured角色时设置标记为'1'
  • 标记逻辑互斥:只要分组有Owner,就不再考虑Life assured的情况

解决方案(Python Pandas)

用Pandas处理这类分组逻辑非常方便,核心思路是按保单号分组后,优先判断Owner是否存在,再处理Life assured的情况:

import pandas as pd

# 构造你的数据集
data = {
    'Policy_no': [1, 1, 1, 2, 2, 3],
    'role': ['Owner', 'Beneficiary', 'Beneficiary', 'Owner', 'Life assured', 'Life assured']
}
df = pd.DataFrame(data)

# 用transform快速生成标记列
df['flag'] = df.groupby('Policy_no')['role'].transform(
    lambda x: '1' if ('Owner' in x) else ('1' if 'Life assured' in x else '0')
)

# 查看结果
print(df)

结果输出

Policy_no           role flag
0          1          Owner    1
1          1    Beneficiary    1
2          1    Beneficiary    1
3          2          Owner    1
4          2  Life assured    1
5          3  Life assured    1

解决方案(SQL)

如果你是用SQL处理数据库中的数据,逻辑是一样的,用CASE结合EXISTS子查询实现:

SELECT 
    Policy_no,
    role,
    CASE
        -- 优先判断当前保单是否有Owner
        WHEN EXISTS (
            SELECT 1 
            FROM your_table t2 
            WHERE t2.Policy_no = t1.Policy_no 
              AND t2.role = 'Owner'
        ) THEN '1'
        -- 没有Owner时,判断是否有Life assured
        WHEN EXISTS (
            SELECT 1 
            FROM your_table t2 
            WHERE t2.Policy_no = t1.Policy_no 
              AND t2.role = 'Life assured'
        ) THEN '1'
        -- 其他情况标记为0(可根据需求调整)
        ELSE '0'
    END AS flag
FROM your_table t1;

逻辑说明

这里的关键是优先级判断:只要分组内存在Owner,就直接标记为'1',不会再去检查Life assured;只有当分组完全没有Owner的时候,才会验证是否存在Life assured,完美符合你“标记不能同时对应Owner和Life assured”的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:37:55