2017-04-14 135 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