This is a question on Udacity Data Science Nanodegree and I can't figure it out. The instructions are:
Using the dataframe's apply method, create a new Series called avg_medal_count
that indicates the average number of gold, silver, and bronze medals earned amongst countries who earned at least one medal of any kind at the 2014 Sochi Olympics.
The code I have currently is:
import numpy
from pandas import DataFrame, Series
def avg_medal_count():
countries = ['Russian Fed.', 'Norway', 'Canada', 'United States',
'Netherlands', 'Germany', 'Switzerland', 'Belarus',
'Austria', 'France', 'Poland', 'China', 'Korea',
'Sweden', 'Czech Republic', 'Slovenia', 'Japan',
'Finland', 'Great Britain', 'Ukraine', 'Slovakia',
'Italy', 'Latvia', 'Australia', 'Croatia', 'Kazakhstan']
gold = [13, 11, 10, 9, 8, 8, 6, 5, 4, 4, 4, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]
silver = [11, 5, 10, 7, 7, 6, 3, 0, 8, 4, 1, 4, 3, 7, 4, 2, 4, 3, 1, 0, 0, 2, 2, 2, 1, 0]
bronze = [9, 10, 5, 12, 9, 5, 2, 1, 5, 7, 1, 2, 2, 6, 2, 4, 3, 1, 2, 1, 0, 6, 2, 1, 0, 1]
olympic_medal_counts = {'country_name':countries,
'gold': Series(gold),
'silver': Series(silver),
'bronze': Series(bronze)}
df = DataFrame(olympic_medal_counts)
# YOUR CODE HERE
return avg_medal_count
I have tried a couple different things such as:
avg_medal_count = df.apply(numpy.mean)
, but get the error saying it could not convert the first column to numeric which makes sense because the first column is a list of countries. How can I use df.apply
on only gold, silver and bronze columns? I have tried other variations, but nothing worked. I am pretty sure that I need to use a combination of df.apply
and numpy.mean
, because that is what I just learned about. Any thoughts?
Thanks!
df[['gold','silver','bronze']].apply(np.mean))
or you could filter the column selection by dtype, the other thing is that you need to also filter the df such that at least one medal of each type has been earned also as this is an exercise for the reader you should tackle this one problem at a time – EdChum