So I’ve got a simple summary dataframe of sales by gender that goes:
Gender | Sales ___________________ M | 25 F | 30
All I want to do now is to return a line in Python that reads: The mean gap in the amount sold is 16.67%
This is simply 30 – 25 divided by 30, and multiplied by 100; and I want a % sign at the end.
I have tried:
m_sales = df.loc[df['Gender'] == 'M'] f_sales = df.loc[df['Gender'] == 'F'] print('The mean gap in the amount sold is:', m_sales['Sales'] - f_sales['Sales'] / m_sales['Sales'] * 100, '%')
Unfortunately this does not work. I get:
The mean gap in the amount sold is: 0 NaN 1 NaN Name: Sales, dtype: object %
Thoughts please? I am very much a beginner so sorry for such a basic query!
Advertisement
Answer
Append ["Sales"].iloc[0]
to your filter expressions to obtain directly values for M
and F
, and then project these changes to the print()
function, too:
m_sales = df.loc[df['Gender'] == 'M']["Sales"].iloc[0] f_sales = df.loc[df['Gender'] == 'F']["Sales"].iloc[0] print('The mean gap in the amount sold is:', (f_sales - m_sales) / f_sales * 100, '%')
The mean gap in the amount sold is: 16.666666666666664 %
The explanation:
df.loc[df['Gender'] == 'M']
is a dataframe;- selecting the
"Sales"
column by appending["Sales"]
you obtain a series (with only 1 element), and - by appending
.iloc[0]
you obtain the first (=the only one) element of that series.
Note:
You may use f-string (for Python 3.6+) or .format()
method for adjusting your output, e.g.
print(f'The mean gap in the amount sold is: {(f_sales - m_sales) / f_sales * 100:.2f}%')
The mean gap in the amount sold is: 16.67%