I am looking for a way to merge two dataframe based on two columns containing ids that could be considered as id1, id2
pair or id2, id1
pair.
I found a similar question to what I am looking for here but it doesn't help me with getting the output I need.
I am working with two dataframes df
and temp
and each of them have two columns with ids in them:
df:
time level_0 level_1
0 60.0 id1 id2
1 420.0 id2 id3
2 120.0 id3 id4
3 336.0 id4 id5
temp:
number level_0 level_1 length width
0 0 id1 id2 25 2
1 1 id4 id5 56 3
2 2 id4 id3 12 7
3 3 id2 id3 750 2
I would like to merge them to get a final
dataframe with level_0
and level_1
with time
, number
, length
and width
.
As you can see in temp
two of the ids are reversed in row 2 and that doesn't allow me to merge both dataframe successfully and I get None
values in the selected columns.
Also the accepted answer of the post quoted above doesn't seem to work as I get a TypeError: '<' not supported between instances of 'tuple' and 'str'
error.
Is there a way of doing a merge based on two columns knowing that some of their values could be in reverse order?
Edit:
After reading @SoheilPourbafrani comment, I tried using sets to compare level_0
and level_1
in both dataframes. However, I came across the fact that rows in temp
are not in the same order as in df
and don't allow me to compare rows between one another.
Here's the desired output for better understanding:
time level_0 level_1 number length width
0 60.0 id1 id2 0 25 2
1 420.0 id2 id3 3 750 2
2 120.0 id3 id4 2 12 7
3 336.0 id4 id5 1 56 3