簡體   English   中英

使用 pandas python 基於公共值合並兩個數據幀?

[英]Merging two dataframes based on common values using pandas python?

這是我關於stackoverflow的第一個問題,所以請多多包涵。
我是 pandas 的新手,我需要根據列中的值合並兩個數據幀:

df1:

   Col1  Col2
0   A    10
1   B    12
2   C    22
3   D    22
4   E    22
5   F    11
6   G    55
7   H    60

df2:

   Col3 Col4
0   J    11
1   K    22
2   L    22
3   M    60
4   N    80
5   O    45
6   P    12
7   Q    65

生成的 dataframe 應該是這樣的:

  Col1  Col2    Col3    Col4
0   B    12       P      12
1   C    22       K      22
2   D    22       L      22
3   H    60       M      60

它應該比較 Col2 和 Col4 並且只保留公共行並將兩個數據幀合並為一個。 我嘗試了以下代碼,但結果不是我想要的。

both_DFS=df1.merge(df2,left_on='Col2',right_on='Col4')

對於這個結果是:

  Col1  Col2    Col3    Col4
0   B    12       P      12
1   C    22       K      22
2   C    22       L      22
3   D    22       K      22
4   D    22       L      22
5   E    22       K      22
6   E    22       L      22
7   H    60       M      60
 

您需要使用groupby().cumcount枚舉重復的行,然后合並:

(df1.assign(idx=df1.groupby('Col2').cumcount())
    .merge(df2.assign(idx=df2.groupby('Col4').cumcount()),
           left_on=['Col2','idx'],
           right_on=['Col4','idx'])
)

Output:

  Col1  Col2  idx Col3  Col4
0    B    12    0    P    12
1    C    22    0    K    22
2    D    22    1    L    22
3    F    11    0    J    11
4    H    60    0    M    60

暫無
暫無

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

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