Home > OS >  Add suffix to a specific row in pandas dataframe
Add suffix to a specific row in pandas dataframe

Time:01-27

Im trying to add suffix to % Paid row in the dataframe, but im stuck with only adding suffix to the column names.

is there a way i can add suffix to a specific row values,

Any suggestions are highly appreciated.

d={
    ("Payments","Jan","NOS"):[],
    ("Payments","Feb","NOS"):[],
    ("Payments","Mar","NOS"):[],
}
d = pd.DataFrame(d)

d.loc["Total",("Payments","Jan","NOS")] = 9991
d.loc["Total",("Payments","Feb","NOS")] = 3638
d.loc["Total",("Payments","Mar","NOS")] = 5433

d.loc["Paid",("Payments","Jan","NOS")] = 139
d.loc["Paid",("Payments","Feb","NOS")] = 123
d.loc["Paid",("Payments","Mar","NOS")] = 20

d.loc["% Paid",("Payments","Jan","NOS")] = round((d.loc["Paid",("Payments","Jan","NOS")] / d.loc["Total",("Payments","Jan","NOS")])*100)
d.loc["% Paid",("Payments","Feb","NOS")] = round((d.loc["Paid",("Payments","Feb","NOS")] / d.loc["Total",("Payments","Feb","NOS")])*100)
d.loc["% Paid",("Payments","Mar","NOS")] = round((d.loc["Paid",("Payments","Mar","NOS")] / d.loc["Total",("Payments","Mar","NOS")])*100)

without suffix

I tried this way, it works but.. im looking for adding suffix for an entire row..

d.loc["% Paid",("Payments","Jan","NOS")] = str(round((d.loc["Paid",("Payments","Jan","NOS")] / d.loc["Total",("Payments","Jan","NOS")])*100))   '%'
d.loc["% Paid",("Payments","Feb","NOS")] = str(round((d.loc["Paid",("Payments","Feb","NOS")] / d.loc["Total",("Payments","Feb","NOS")])*100))   '%
d.loc["% Paid",("Payments","Mar","NOS")] = str(round((d.loc["Paid",("Payments","Mar","NOS")] / d.loc["Total",("Payments","Mar","NOS")])*100))   '%'

with suffix

CodePudding user response:

Select row separately by first index value, round and convert to integers, last to strings and add %:

d.loc["% Paid"] = d.loc["% Paid"].round().astype(int).astype(str).add(' %')
print (d)
       Payments                
            Jan     Feb     Mar
            NOS     NOS     NOS
Total    9991.0  3638.0  5433.0
Paid      139.0   123.0    20.0
% Paid      1 %     3 %     0 %
  • Related