首页 > 解决方案 > 用满足其他列条件的值填充列

问题描述

我有如下表:

con_no     pr_no     flag_1  flag_2
con_002   1000234      1       0
con_002   1000345     -1       0
con_002   1100200      1       1
con_002   1005890      0       0
con_003   1100367      0       0
con_003   1000445      1       1
con_003   1200334     -1       0
con_003   1140567      1       0

现在我想要另一列填充pr_no其 flag_2 = 1 和其中 flag_1 = 1 在特定con_no. 所以结果表应该看起来像

con_no     pr_no     flag_1  flag_2  Parent_pr
con_002   1000234      1       0      1100200 <---This belongs to con_002
con_002   1000345     -1       0      
con_002   1100200      1       1      1100200 <---This belongs to con_002
con_002   1005890      0       0
con_003   1100367      0       0
con_003   1000445      1       1      1000445 <---This belongs to con_003
con_003   1200334     -1       0
con_003   1140567      1       0      1000445 <---This belongs to con_003

如何使用 python (pandas) 或 SQL 实现上述目标。实际上这个表在数据库(postgreSQL)中。所以一个 SQL 查询字符串也可以。

不过有一个问题。每次程序运行时,con_no都会重新洗牌。有些pr_no可能附加到新的或现有的(但不同的con_no)。

标签: pythonsqlpostgresql

解决方案


您应该将表与自身连接起来。如果您的数据在名为 的表中my_table,则这样的查询应该可以工作:

with cte as (
    select con_no, pr_no
       from my_table
      where flag_2 = 1)
select t.con_no, t.pr_no, t.flog_1, t.flog_2, cte.pr_no as parent_pf
  from my_table as t
  left outer join cte on (cte.con_no = t.con_no and t.flag_1 = 1)

推荐阅读