2017-04-14 133 views
1

給定兩個dataframes:合併熊貓DataFrames上兩個值不考慮訂單的排

df1 = pd.DataFrame([ 
        ['Red', 'Blu', 1.1], 
        ['Yel', 'Blu', 2.1], 
        ['Grn', 'Grn', 3.1]], columns=['col_1a','col_1b','score_1']) 

df2 = pd.DataFrame([ 
        ['Blu', 'Red', 1.2], 
        ['Yel', 'Blu', 2.2], 
        ['Vio', 'Vio', 3.2]], columns=['col_2a','col_2b','score_2']) 

我想將它們合併兩列如下圖所示:

df3 = pd.DataFrame([ 
        ['Blu', 'Red', 1.1, 1.2], 
        ['Yel', 'Blu', 2.1, 2.2], 
        ], columns=['col_a','col_b','score_1','score_2']) 

買者1:順序列內容可以在數據幀之間切換以進行合併。例如,第一行應該合併,因爲它包含「紅色」和「藍色」,即使它們出現在不同的列中。

注意事項2:最終df_3中的列順序並不重要。 「Blu」是否在col_acol_b中並不意味着什麼。

買者3:別的不匹配,像最後一排,被忽略

+0

你能證明你的合併給了你什麼,你真的想讓它看起來像嗎? – splinter

+0

根據每個df的前兩列,將'df_1'和'df_2'合併爲'df_3'。 –

+0

你確定你沒有type-o?如果我將合併'df1'和'df2',那麼我將得到一個只有一行的數據幀。也就是說,我認爲'['Red','Blu',1.1]'應該是'['Blu','Red',1.1]'' – splinter

回答

3

您可以沿行的前兩列進行排序,然後將它們合併:

# rename column names 
cols = ['col_a', 'col_b'] 
df1.columns = cols + ['score_1'] 
df2.columns = cols + ['score_2'] 

# sort the two id columns along the row 
df1[cols] = pd.np.sort(df1[cols], axis=1) 
df2[cols] = pd.np.sort(df2[cols], axis=1) 

# merge 
df1.merge(df2) 

enter image description here