Python, Wie zu finden, Durchschnitt von Spalten mit dataframes-Methode anwenden
Dies ist eine Frage, auf Udacity Daten Wissenschaft Nanodegree und ich kann ' T es herausfinden. Die Anweisungen sind:
Verwenden Sie das dataframe ' s Methode anwenden, erstellen Sie eine neue Serie namens avg_medal_count
zeigt, dass die Durchschnittliche Anzahl der gold -, Silber-und bronze-Medaillen verdient unter den Ländern, die verdient mindestens eine Medaille jeglicher Art in der 2014 Olympischen Spiele in Sotschi.
Den code, den ich derzeit habe ist:
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
Ich habe versucht ein paar verschiedene Dinge wie:
avg_medal_count = df.apply(numpy.mean)
, bekomme aber immer die Fehlermeldung besagt, dass es nicht konvertieren konnte die erste Spalte, die numerische, die Sinn macht, da die erste Spalte ist eine Liste von Ländern. Wie kann ich df.apply
nur auf gold -, Silber-und bronze-Spalten? Ich habe versucht andere Variationen, aber nichts funktionierte. Ich bin mir ziemlich sicher, dass ich brauchen, um eine Kombination von df.apply
und numpy.mean
, denn das ist das, was ich gerade erfuhr. Irgendwelche Gedanken?
Dank!
- Gut, was sind die Einschränkungen hier? Ich meine, man konnte nur tun
df[['gold','silver','bronze']].apply(np.mean))
oder Sie können filter der Spalte Auswahl von dtype, die andere Sache ist, dass müssen Sie auch filter df, so dass mindestens eine Medaille von jeder Typ hat verdient, auch dies ist eine übung für die Leser, die Sie angehen sollte dies ein problem gleichzeitig
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe gerade verwendet das Konzept der R-Sprache in der pandas zu lösen, und es funktioniert. Versuchen, diesen code unter # dein code hier
In python 3 IDE (wie pycharm) sollten Sie
setzen Sie dann die main-Funktion, die außerhalb der Einbuchtung um die Antwort zu finden
Würde ich zuerst ändern, wie Sie die Daten importieren, um:
Ich würde dann berechnen Sie eine neue Spalte, die die Summe der Zeilen für die toal Anzahl der Medaillen pro Land.
Ergebnisse:
Schließlich Teilmenge der DataFrame für die Zeilen mit Medaille Summen größer oder gleich 1 und finden Sie den Durchschnitt der Spalten.
Ergebnisse:
Dies könnte auch dadurch erreicht werden, in einer Linie mit:
Weder die Lösung des oben genannten Verwendungen anzuwenden, wie es in dem problem. Verwenden Sie die folgenden:
Die Anwendung von numpy.meine auf die original df immer wieder Fehler, die aufgrund der text-Spalte 'Länder'
Musst dies tun, weil die Mittel werden nur für die Spalten mit numerischen und nicht die Länder, einen string,...
avg_medal_count = df.mean()
Alle Länder haben mehr als 1 Medaille in diesem set, so gibt es keine Notwendigkeit, um es zu filtern. Wenn Sie es brauchen:
avg_medal_count = df[(df.gold + df.silver + df.bronze) > 0].mean()
Panda 0.22.0
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.mean.html