簡體   English   中英

Pandas left join 返回多行

[英]Pandas left join returning multiple rows

我正在使用 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

有沒有pythonic的方法來做到這一點?

# 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM