Jul-13-2023, 05:34 PM
You should start with 1 question.
import pandas as pd df = pd.DataFrame( [ {"type": "Strongly disagree", "value": 24}, {"type": "Disagree", "value": 294}, {"type": "Neither agree nor disagree", "value": 594}, {"type": "Agree", "value": 1927}, {"type": "Strongly agree", "value": 376}, ] ) df["type_code"] = df.type.map( { "Strongly disagree": -2, "Disagree": -1, "Neither agree nor disagree": 0, "Agree": 1, "Strongly agree": 2, } ) df = df.set_index("type_code").sort_index() perc = (df["value"] / df["value"].sum()) * 100 df["percentage"] = perc perc = df["percentage"] df["percentage_end"] = perc.cumsum() - (perc[-2] + perc[-1] + perc[0] / 2) perc = df["percentage"] df["percentage_start"] = df["percentage_end"] - perc df = df.reset_index(drop=True) print(df)
Output: type value percentage percentage_end percentage_start
0 Strongly disagree 24 0.746501 -18.382582 -19.129082
1 Disagree 294 9.144635 -9.237947 -18.382582
2 Neither agree nor disagree 594 18.475894 9.237947 -9.237947
3 Agree 1927 59.937792 69.175739 9.237947
4 Strongly agree 376 11.695179 80.870918 69.175739
Grouping and using the apply function on groups is fairly advanced pandas. Save that for later.