簡體   English   中英

通過搜索和匹配完全相同的字符串來連接兩個數據框

[英]Join two data frames by searching & matching exactly same strings

我有兩個 python 數據幀:其中一個有一個列有一個行'AC-2'另一個數據幀包括有一個字符串行'AC-20,AC8,AC-15'的列

str_match = "({})".format("|".join(df1['column_first_dataframe']))
df2.merge(df2,how='left',left_on=df1['column_first_dataframe'].str.extract(str_match)[0], right_on="column_second_dataframe")

第一個數據集:

Column1 Column2
AC-2         2       
AC-20        1       
AC-15        3       
AC-1         2       
AC-5         5      
     

第二個數據集:

Column1        
AC-2,AC-5,AC-30      
AC-20,AC-30,AC11

我發現:

Column1 Column2             
AC-2       AC-20,AC-30,AC11       
AC-2       AC-2,AC-5,AC-30   
AC-20      AC-20,AC-30,AC11        
AC-15        null      
AC-1         null      
AC-5        AC-2,AC-5,AC-30 

上面有數據集 1 的 AC-2 和數據集 2 的字符串中的 AC-20 之間的匹配,但它們在我的數據集中是不同的東西。 我想要的 output:

Column1 Column2             
AC-2       AC-2,AC-5,AC-30      
AC-20      AC-20,AC-30,AC11        
AC-15        null      
AC-1         null      
AC-5       AC-2,AC-5,AC-30

我試圖通過搜索和匹配來合並數據幀,但我的代碼將 AC-2 合並到 AC-20。 我不想那樣做。 是否有任何搜索和匹配方法可以完全合並我想要的數據框。 我不想合並 AC-20 和 AC-2。 它應該將 AC-2 和 AC-2 與完全相同的東西合並。

感謝您的貢獻!

一種簡單的方法是split和分解explode的 Column2 以獲得每個完整單詞的一行並執行簡單的左merge

(df1
 .merge(df2.assign(group=df2['Column1'].str.split(','))
           .rename(columns={'Column1': 'Column3'})
           .explode('group'),
        left_on='Column1', right_on='group', how='left'
       )
 .drop(columns='group')
)

output:

  Column1  Column2           Column3
0    AC-2        2   AC-2,AC-5,AC-30
1   AC-20        1  AC-20,AC-30,AC11
2   AC-15        3               NaN
3    AC-1        2               NaN
4    AC-5        5   AC-2,AC-5,AC-30
選擇

注意。 我正在生產稍有不同的 output 以保留所有列。 如果你真的想要你的 output,只需在 df1 中刪除“Column2”,然后在 df2 中將“Column1”重命名為“Column2”

(df1
 .drop(columns='Column2')
 .merge(df2.rename(columns={'Column1': 'Column2'})
           .assign(Column1=df2['Column1'].str.split(','))
           .explode('Column1'),
        on='Column1', how='left'
       )
)

output:

  Column1           Column2
0    AC-2   AC-2,AC-5,AC-30
1   AC-20  AC-20,AC-30,AC11
2   AC-15               NaN
3    AC-1               NaN
4    AC-5   AC-2,AC-5,AC-30

暫無
暫無

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

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