I have a pandas dataframe like in the picture. How can I turn it into the table like below. (the demonstration is in excel but I just want to illustrate to you how the table look like- this question does not related to importing and exporting dataframe from/to excel)
Thank you enter image description here
2 Answers 2
This is not possible.
Underlying pandas.DataFrame objects are numpy arrays, which do not group data in the way you suggest. Therefore, an arbitrary column cannot be displayed as grouped data.
Option 1
It is possible to partially replicate your desired output by using MultiIndex:
import pandas as pd
df = pd.DataFrame([['AAA', 8, 2, 'BBB'],
['AAA', 9, 5, 'BBB'],
['AAA', 10, 6, 'BBB']],
columns=['Name', 'Score1', 'Score2', 'PM'])
res = df.set_index(['Name', 'PM'])
Result:
Score1 Score2
Name PM
AAA BBB 8 2
BBB 9 5
BBB 10 6
Option 2
Or you can add a dummy column and set_index on 3 columns:
df['dummy'] = 0
res = df.set_index(['Name', 'PM', 'dummy'])
Result:
Score1 Score2
Name PM dummy
AAA BBB 0 8 2
0 9 5
0 10 6
4 Comments
The dataframe you have looks fine. It really depends on what you are trying to do.
If you are trying to return a dataframe where Name is AAA and PM is BBB you should use the pandas lookup
dfnew = df[(df.Name == 'AAA') & (df.PM == 'BBB')]
pandasitself, you don't get these "combined cells" as you visualize them. You can't, as far as I know, get your output into Excel with combined rows frompandasin the way you want. So what exactly are you looking for?