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

基于条件从指定行向下填充:标记保单问题行及后续行

保单问题版本及后续记录标记方案

现有一张记录保单交易信息的表格,当某保单的某一行中IssueFoundOnThisVersion字段为'Y'时,代表该保单存在特定问题。需要新增一列,将该'Y'所在行及同保单的所有后续行标记为1。核心需求是识别每个保单生命周期中出现问题的版本,以及该版本之后的所有同保单记录,目前不确定正确的分区处理方式。

示例数据

PolicyNumTransactionDatePolicyVersionIssueFoundOnThisVersionDesiredResult
A123452023-01-011N0
A123452023-06-012Y1
A123452023-07-013N1
A123452024-08-014N1
A123462023-02-011N0
A123462023-03-012N0
A123462023-07-013N0
A123462023-08-014Y1
A123462024-01-015N1

解决方案

核心逻辑

按PolicyNum对数据分区,每个分区内按PolicyVersion(或TransactionDate,二者通常递增一致)排序,累计统计当前行及之前是否出现过'Y',只要出现过一次,后续所有行就标记为1。

SQL实现(适用于Spark SQL、BigQuery等)

SELECT
    PolicyNum,
    TransactionDate,
    PolicyVersion,
    IssueFoundOnThisVersion,
    CASE 
        WHEN SUM(CASE WHEN IssueFoundOnThisVersion = 'Y' THEN 1 ELSE 0 END) OVER (
            PARTITION BY PolicyNum 
            ORDER BY PolicyVersion 
            ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
        ) >= 1 THEN 1 
        ELSE 0 
    END AS DesiredResult
FROM
    your_table;

Pandas实现(Python)

import pandas as pd

# 加载数据
df = pd.read_csv('your_data_file.csv')

# 分组计算标记:按保单号分组,统计累计出现Y的情况,转换为0/1
df['DesiredResult'] = df.groupby('PolicyNum')['IssueFoundOnThisVersion'] \
    .apply(lambda x: x.eq('Y').cumsum().ge(1).astype(int)) \
    .reset_index(level=0, drop=True)

# 查看结果
print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:28:11