无论行中的顺序如何,都将Pandas DataFrames合并为两列值

时间:2017-04-14 01:16:25

标签: python pandas merge

给出两个数据帧:

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_a还是col_b并不代表任何内容。

警告3:忽略任何其他不匹配的内容,如最后一行,

1 个答案:

答案 0 :(得分: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