PostgreSQL或pandas按con_no分组满足flag条件填充Parent_pr列
实现方案
1. Pandas 实现
核心逻辑是先提取所有con_no对应的父级pr_no映射,再按行匹配填充,仅flag_1=1的行保留值:
import pandas as pd # 假设df为读取到的原始数据表 # 生成con_no和对应父pr_no的映射,默认一个con_no下存在多个符合条件记录时取最后一条,需取第一条可加.drop_duplicates('con_no', keep='first') parent_map = df[(df['flag_1'] == 1) & (df['flag_2'] == 1)].set_index('con_no')['pr_no'].to_dict() # 填充Parent_pr列 df['Parent_pr'] = df.apply( lambda row: parent_map.get(row['con_no']) if row['flag_1'] == 1 else None, axis=1 )
2. PostgreSQL 实现
使用窗口函数实时按con_no分组计算,适配con_no动态分配的场景,每次查询都是基于当前最新数据计算:
SELECT con_no, pr_no, flag_1, flag_2, -- 仅flag_1=1的行返回Parent_pr,其余返回空 CASE WHEN flag_1 = 1 THEN -- 按con_no分组取组内满足条件的pr_no,多匹配项时可将MAX替换为MIN/FIRST_VALUE调整取值规则 MAX(CASE WHEN flag_1 = 1 AND flag_2 = 1 THEN pr_no END) OVER (PARTITION BY con_no) ELSE NULL END AS Parent_pr FROM 你的表名; -- 替换为实际表名
说明:如果单个
con_no下存在多条满足flag_1=1且flag_2=1的记录,可根据业务需求调整取值规则,比如取最早/最新生成的pr_no即可。
内容的提问来源于stack exchange,提问作者pythondumb
相关产品推荐
相关产品推荐

