簡體   English   中英

匹配兩列中的數據並將匹配項添加到數據框

[英]Match data in two columns and add match to the dataframe

我有兩個數據框:第一個數據框

  Column1 Column2 Column3 0 A1 B1 C1 1 A2 B2 C2 2 A3 B3 C3 2 A4 B4 C4 

第二個數據框

  Column1 Column2 0 A1 S1 1 B3 S2 2 A3 S3 3 B5 S4 4 A5 S5 

我想將數據表1中的Column1,COlumn2中的值與數據幀2中的Column1中的兩個表連接起來

 Whatever A* value from DF2 matches with Column1 values in DF1, the corresponding Column2 value goes into Column 4 in output. Whatever D* value from DF2 matches with Column1 values in DF1, the corresponding Column2 value goes into Column 5 in output. 

輸出應該是這樣的:

  Column1 Column2 Column3 Column4 Column5 0 A1 B1 C1 S1 1 A2 B2 C2 2 A3 B3 C3 S3 S2 2 A4 B4 C4 

A1匹配,因此S1轉到第4列,B3匹配,因此S2轉到第5列,A3匹配,因此S3到第4列,B5不匹配,因此根本不顯示A5不匹配,因此根本不顯示。

我這樣做的骯臟方式是將A *和B *值分成兩個單獨的數據幀,然后使用外部聯接將它們合並。 但是我正在尋找一種方法,而無需為df2數據創建兩個單獨的數據集。

以下代碼可完成您的示例:

result_df = (
    df1.merge(
        df2.rename({'Column2': 'Column4'}, axis='columns'), how='left', on=['Column1']
    )
    .merge(
        df2.rename({'Column2': 'Column5'}, axis='columns'),
        how='left',
        left_on=['Column2'],
        right_on=['Column1'],
    )
    .drop(['Column1_y'], axis='columns')
    .rename({'Column1_x': 'Column1'}, axis='columns')
)

我對最后兩個命令的droprename並不滿意,但是我無法避免在第二次合並中重復進行這些列。

編輯 :忘記了最后一個rename函數中的axis參數。

使用上面的答案,我想出了另一種方法來實現這一點:

result_df1 = (df1.merge(
    df2[df2['Column1'].str.contains(r'A')]
    .rename({'Column2': 'Column4'},axis='columns'),
    how='outer',
    on=['Column1']
    )
    .merge(
    df2[df2['Column1'].str.contains(r'B')]
    .rename({'Column2': 'Column5','Column1': 'Column2'},axis='columns'),
    how='outer',
    on=['Column2']
    )
    .replace(np.nan, '', regex=True))

暫無
暫無

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

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