Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Headers to column, pandas DataFrame

for example I have a pandas DataFrame of the test results in some class. It could look like this table:

Name English French History Math Physic Chemistry Biology
Mike 3 3 4 5 6 5 4
Tom 4 4 3 4 4 5 5
Nina 5 6 4 3 3 3 5
Anna 4 3 4 5 5 3 3
Musa 5 5 4 4 4 6 5
Maria 4 3 5 4 3 2 3
Chris 6 5 5 5 5 5 6

For every student I want to create at least two columns with the best test result and best subject. Important: every student can have more than only one best subject (the results are similar)!

For the example above it should be look like this:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Name English French History Math Physic Chemistry Biology Best result Best subject 1 Best subject 2
Mike 3 3 4 5 6 5 4 6 Physic None
Tom 4 4 3 4 4 5 5 5 Chemistry Biology
Nina 5 6 4 3 3 3 5 6 French None
Anna 4 3 4 5 5 3 3 5 Math Physic
Musa 5 5 4 4 4 6 5 6 Chemistry None
Maria 4 3 5 4 3 2 3 5 History None
Chris 6 5 5 5 5 5 6 6 English Biology

what is the best way to do it in Pandas? Thank you in advance!

what is the best way to do it in Pandas? Thank you in advance!

>Solution :

Another possible solution :

tmp = df.set_index("Name") # a DataFrame
bre = tmp.max(axis=1) # a Series

bsu = (
    ((tmp.columns + "|") @ tmp.eq(bre, axis=0).T)
        .str.strip("|").str.split("|", expand=True)
        .rename(lambda x: f"Best subject {x+1}", axis=1)
    )

out = tmp.assign(**{"Best result": bre}).join(bsu).reset_index()#.fillna("None")

Output :

Name English French History Math Physic Chemistry Biology Best result Best subject 1 Best subject 2
0 Mike 3 3 4 5 6 5 4 6 Physic
1 Tom 4 4 3 4 4 5 5 5 Chemistry Biology
2 Nina 5 6 4 3 3 3 5 6 French
3 Anna 4 3 4 5 5 3 3 5 Math Physic
4 Musa 5 5 4 4 4 6 5 6 Chemistry
5 Maria 4 3 5 4 3 2 3 5 History
6 Chris 6 5 5 5 5 5 6 6 English Biology
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading