I'm trying to reshape a data frame in a certain way.
This is the data frame I have,
col_1 | col_2 |
---|---|
One | Roxanne |
Two | Ghina |
Roxanne | Leila |
Ghina | George |
Three | Rock |
Four | Rock |
I'd like to reshape the dataframe such that it looks like this:
col_3 |
---|
Roxanne |
Ghina |
Leila |
George |
Rock |
Rock |
One |
Two |
Three |
Four |
How would I go about doing this? (without changing col_2 values)
CodePudding user response:
For expected ouput join both columns with removed matched values from col_1
by col_2
:
df = pd.concat([df.col_2, df.loc[~df.col_1.isin(df.col_2), 'col_1']]).to_frame('col_3')
print (df)
col_3
0 Roxanne
1 Ghina
2 Leila
3 George
4 Rock
5 Rock
0 One
1 Two
4 Three
5 Four
CodePudding user response:
You can use:
out = (df[['col_2', 'col_1']].melt(value_name='col_3')[['col_3']]
.drop_duplicates(ignore_index=True)
)
Or:
out = (df.loc[:, ::-1].unstack().reset_index(drop=True).to_frame(name='col_3')
.drop_duplicates(ignore_index=True)
)
output:
col_3
0 Roxanne
1 Ghina
2 Leila
3 George
4 Rock
5 One
6 Two
7 Three
8 Four