Merge columns into one Pandas

Question:

I would like to transform the following DataFrame:

   Cat A  Cat B  Total points
0     20     30            50
1     25     35            60

Into:

  Cat  Points  Total points
0   A      20            50
1   A      25            60
2   B      30            50
3   B      35            60

I’ve tried to reply to my own post but i seems like it didn’t work. So i’ll modify my original post instead. In the future how should I reply to a comment?

To answer your question:
Yes it was 35 instead of 45

This is a screen shot of my DataFrame:
https://i.stack.imgur.com/OQ79p.png

Asked By: Paul-Ary Sigwald

||

Answers:

You could use pd.melt to achieve this. E.g. as follows:

import pandas as pd

data = {'Cat A': [20, 25], 'Cat B': [30, 35], 'Total points': [50, 60]}
df = pd.DataFrame(data)

df_res = pd.melt(df, id_vars='Total points', value_vars=['Cat A','Cat B'], value_name='Points', var_name='Cat')
print(df_res)

   Total points    Cat  Points
0            50  Cat A      20
1            60  Cat A      25
2            50  Cat B      30
3            60  Cat B      35

To get this into the specific form you’ve requested (your desired df), you could do:

df_res['Cat'] = df_res['Cat'].str.extract('s(.*$)')
col_order = ['Cat', 'Points', 'Total points']
df_res = df_res.loc[:, col_order]

print(df_res)

  Cat  Points  Total points
0   A      20            50
1   A      25            60
2   B      30            50
3   B      35            60
Answered By: ouroboros1
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.