左连接返回多行

2024-09-30 02:35:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python合并两个数据帧:

join=pd.merge(df1,df2,on=["A","B"],how="left")

表1:

         A   B
         a   1
         b   2
         c   3

表2:

         A   B  Flag   C
         a   1   0    20
         b   2   1    40 
         c   3   0    60
         a   1   1    80
         b   2   0    10

左联接后得到的结果是:

         A   B  Flag  C
         a   1   0    20
         a   1   1    80
         b   2   1    40
         b   2   0    10  
         c   3   0    60 

这里我们看到第1行和第2行由于表2的原因已经出现了两次。我只想基于Flag列保留一行。我想保留Falg值为`=1的两行中的一行

因此,最终的预期产出是:

          A   B  Flag  C
           a   1   1   80
           b   2   1   40
           c   3   0   60

有什么类似Python的方法吗


Tags: 数据方法on原因mergelefthowflag
3条回答
# raise preferred lines to the top
df2 = df2.sort_values(by='Flag', ascending=False) 

# deduplicate
df2 = df2.drop_duplicates(subset=['A','B'],  keep='first')

# merge
pd.merge(df1, df2, on=['A','B'])

   A  B  Flag   C
0  a  1     1  80
1  b  2     1  40
2  c  3     0  60

这个概念类似于您在SQL上所做的操作:使用选择标准(在本例中为标志指定最大值)分隔一个表,留下足够的列来匹配联合表上的观察值

join = pd.merge(df1, df2, how="left").reset_index()
maximums = join.groupby(by='A').max()
join = pd.merge(join, maximums, on=['Flag', 'A'])

尝试使用此连接:

join=pd.merge(df1,df2,on=["A","B"],how="left", left_index=True, right_index=True)
print(join)

相关问题 更多 >

    热门问题