I have a dataframe like this: DF1
text yellow blue red orange
dfsfs 0 1 1 0
sdfsdf 0 0 1 1
asdasd 1 1 1 1
and Another dataframe like this: DF2
text blue orange pink red black yellow
dfsfs 0 1 1 0 0 1
sdfsdf 0 0 1 1 0 1
asdasd 1 1 1 1 0 0
What's the best way to order the second dataframe'columns(DF2) in the same order we have in the first dataframe (DF1) considering the names that matchs and the names that dosen't match in last positions?
The output shoud be:
text yellow blue red orange black pink
dfsfs 0 1 1 0 0 1
sdfsdf 0 0 1 1 0 1
asdasd 1 1 1 1 0 1
CodePudding user response:
We can use sort by key and supply index to the sorting algorithm where we want our data to be based on the second list.
def position(value):
try:
return X.index(value)
except ValueError:
return len(X)
X = df1.columns.tolist()
Y = df2.columns.tolist()
Y.sort(key=position)
The columns from second dataframe is ['yellow', 'blue', 'red', 'orange', 'pink', 'black'].
Now we can rearrange our database columns using :
df2 = df2[Y]
This gives us the expected output :
text yellow blue red orange black pink
dfsfs 0 1 1 0 0 1
sdfsdf 0 0 1 1 0 1
asdasd 1 1 1 1 0 1
CodePudding user response:
You can do:
df2[df1.columns.append(df2.columns.drop(df1.columns))]
output:
text yellow blue red orange pink black
0 dfsfs 1 0 0 1 1 0
1 sdfsdf 1 0 1 0 1 0
2 asdasd 0 1 1 1 1 0
