Seite 1 von 1
minimalWert aus einem Pandadataframe
Verfasst: Dienstag 20. Oktober 2020, 17:57
von Schokomuffin
Hallo

Ich bräuchte Hilfe und zwar habe einen Dataframe mit Pandas erstellt, wie eine große Tabelle mit mehreren Columns und ganz vielen Rows.
Es handelt sich um Preise und um Handys mit unterschiedlichen Erscheinungsjahren.
In diesem Dataframe sind über 4000 verschiedene Handys aufgelistet mit den jeweiligen Daten... Preis, Produzent, Erscheinungsjahr,...
Meine Aufgabe ist nun unter der Bedingung, dass das Erscheinungsjahr 2014 ist, ich den niedrigsten Preis in diesem Jahr ermitteln soll.
Wie kann ich das machen?
Ein Tipp könnte sein, dass ich die numpy.argmin Funktion verwenden könnte.
Ich habe nur keine Ahnung, wie ich vorgehen soll.
Danke schonmal im Vorraus.

Re: minimalWert aus einem Pandadataframe
Verfasst: Mittwoch 21. Oktober 2020, 06:54
von Jankie
Was hast du denn bereits versucht? Klappt das Einlesen der Daten? Wie weit bist du gekommen? Diese Aufgabe lässt sich auch nur mit pandas lösen.
Ich würde mir erst einmal ein DF erzeugen nur mit allen Handys von 2014 und dort dann mit .min() den Minimalwert heraussuchen.
Re: minimalWert aus einem Pandadataframe
Verfasst: Mittwoch 21. Oktober 2020, 12:07
von Schokomuffin
Also ich habe den gesamten Dataframe problemlos eingelesen, welcher alle Daten umfasst.
Jetzt geht es nur darum aus diesem Dataframe unterschiedliche Sachen herauszulesen.
Da ist aber leider ein ziemlicher Neuling in Python bin, fehlt mir das grundlegende KnowHow.
Wie könnte ich denn einen Dataframe mit nur Daten von dem Jahr 2014 machen.
Ich weiß nur, dass ich einzelne Attribute in Dataframes umwandeln kann, indem ich ....
df_Preise = df.Preis
beispielsweise machen könnte.
Und wie wäre denn dennoch die Lösung mit np.argmin?
Ich frage deshalb, weil explizit im Unterricht zu dieser Aufgabe erwähnt wurde.
Re: minimalWert aus einem Pandadataframe
Verfasst: Mittwoch 21. Oktober 2020, 12:10
von Jankie
Dann zeig doch mal deinen Code den du bisher hast un deine bisherigen Versuche und was da nicht geklappt hat oder was du nicht verstehst.
pandas hat eine sehr gute
Dokumentation, da solltest du mal einen Blick rein werfen.
Re: minimalWert aus einem Pandadataframe
Verfasst: Mittwoch 21. Oktober 2020, 12:51
von snafu
Wenn du gar nicht so recht weißt, wo du anfangen sollst, dann such dir doch mal ein entsprechendes Tutorial raus. Eine grobe Einführung zum Selektieren (und das auch noch auf Deutsch) findet sich zB hier als Video:
https://www.youtube.com/watch?v=iaziBEhdyRk
Auch wenn du damit vielleicht nicht direkt deine Aufgabe lösen kannst, so gibt es dir ein erstes Gefühl dafür wie Pandas funktioniert.
Re: minimalWert aus einem Pandadataframe
Verfasst: Mittwoch 21. Oktober 2020, 12:54
von Jankie
Habe es jetzt auch mal selbst versucht mit numpy zu machen (erstes mal mit numpy..), es ist möglich, allerdings sieht mein Weg sehr umsändlich und unleserlich aus. Gibt es jemandem dem ich das mal per PN schicken könnte und der drüber schaut und ggf. Anmerkungen gibt? Will dem User hier ja nicht seine Aufgabe vorwegnehmen.
Re: minimalWert aus einem Pandadataframe
Verfasst: Mittwoch 21. Oktober 2020, 14:27
von Schokomuffin
Ich habe erstmal den Dataframe eingelesen.
df = pd.read_csv('mobiledata.csv',sep=',')
Nach einiger Recherche habe ich es geschafft, einen Dataframe mit allen Handys von 2014 zu erstellen.
Ich hatte es die ganze Zeit mit for Schleifen und if Sätzen versucht, da war ich wohl auf dem Holzweg.
df_Year_2014=df[df.Year==2014]
Jetzt soll ich nur noch den Produzenten herausfinden, der den minimalsten Preis aus diesem Jahr hat.
Dazu hatte ich mir überlegt nochmal einen neuen Dataframe mit allen Daten zu dem Produkt mit dem niedrigsten Preis.
Dann könnte ich den Produzenten ja manuell herauslesen.
Zumindest hätte ich keine Idee, wie ich mir den Produzenten ausgeben lassen könnte.
Außer vielleicht: billigster_Produzent = df_minPreis2014['Produzenten']
Um diesen Dataframe aber überhaupt erstmal zu erstellen, habe ich das versucht:
df_minPreis2014 = df[df_Year_2014.Price == min.(df_Year_2014.Price)]
Doch da kommt nur invalid syntax raus.
Mein np.argmin habe ich jetzt mal ganz weggelassen, weil ich die noch nie hatte und ehrlich gesagt auch nicht richtig verstehe.
Vielen Dank auf jeden Fall schon mal für die Hilfe.

Re: minimalWert aus einem Pandadataframe
Verfasst: Mittwoch 21. Oktober 2020, 14:47
von snafu
Du hast ja bereits ein neues DataFrame herausgefiltert. Auf dem Ergebnis kannst du direkt die betreffende Spalte selektieren und darauf argmin() aufrufen:
Und mit dem Index holst du dir anschließend die entsprechende Zeile aus dem ursprünglichen df und kannst davon auch nur den Hersteller anzeigen...
Übrigens muss man nicht jedes kleine Zwischenergebnis an einen Namen binden, sondern kann die Ergebnisse direkt verknüpfen (wie du ja an dem Beispiel hier siehst). Erst wenn zu komplex wird, "merkt" man sich die Rückgaben.
Re: minimalWert aus einem Pandadataframe
Verfasst: Mittwoch 21. Oktober 2020, 15:09
von Schokomuffin
Achso, das heißt, du hast mein df_Year_2014 sozusagen direkt eingesetzt, ohne ihm vorher eine Variable zuzuordnen!?
Okay und dürfte ich fragen, was genau der Unterschied zur df.min() Funktion ist?
Könnte man nach deinem Vorgehen dann nicht auch:
index = df[df.Year==2014].Price.min() schreiben?
Bzw. argmin ist doch eine numpy Funktion, müsste dann da nicht noch irgendwo ein np. stehen?
Entschuldigt bitte meine dummen Fragen, ich programmiere nur zum ersten Mal und versuche es wirklich zu verstehen. ^^
Re: minimalWert aus einem Pandadataframe
Verfasst: Mittwoch 21. Oktober 2020, 15:25
von Schokomuffin
Okay, ich habe den Unterschied zwischen min() und argmin() verstanden.
Vielen Dank!!!
Das Einzige, was ich mich noch frage, wieso da kein np steht, obwohl es ja eine numpy Funktion ist.
Ist das nicht immer nötig?
Re: minimalWert aus einem Pandadataframe
Verfasst: Mittwoch 21. Oktober 2020, 15:26
von __blackjack__
@Schokomuffin: `min()` liefert den niedrigsten Preis, nicht den Index in dem dieser niedrigste Preis steht. Wobei *der* niedrigste Preis in beiden Fällen nicht stimmt. Du müsstest also überlegen ob einer der niedrigsten Preise reicht, falls der niedrigste Wert mehrfach vorkommt, oder ob man dann noch was anderes machen muss.
`numpy.argmin()` ist eine Numpy-Funktion. Das hindert niemanden eine Funktion oder Methode auch `argmin()` zu nennen, und so haben unter anderem `pandas.Series`-Objekte eben auch eine `argmin()`-Methode. Bei Methoden ist nicht nur der Name wichtig, sondern auch auf was für einem Datentyp die aufgerufen wird.
Re: minimalWert aus einem Pandadataframe
Verfasst: Mittwoch 21. Oktober 2020, 15:27
von snafu
min() holt den kleinsten Wert, argmin() den Index mit dem kleinsten Wert. min() sagt dir also zB dass der kleinste Wert 14,50 ist. argmin() sagt, wo (Index) sich der kleinste Wert im Frame befindet. Das sind halt zwei unterschiedliche Dinge.
Ob man etwas so oder so schreiben könnte, lässt sich ganz einfach in der Python-Shell ausprobieren. In Verbindung mit Datenanalyse würde ich da eher zu Jupyter anstelle der Standard-Shell raten.
Re: minimalWert aus einem Pandadataframe
Verfasst: Mittwoch 21. Oktober 2020, 15:40
von snafu
Schokomuffin hat geschrieben: Mittwoch 21. Oktober 2020, 15:09
Achso, das heißt, du hast mein df_Year_2014 sozusagen direkt eingesetzt, ohne ihm vorher eine Variable zuzuordnen!?. ^^
Genau genommen hat df.year auch schon eine Rückgabe, nämlich die Spalte für das Jahr. df.year==2014 hat ebenfalls eine Rückgabe, nämlich Wahrheitswerte ob die Bedingung zutrifft. Diese repräsentieren sozusagen für jede Zeile, ob man sie haben will oder nicht. Dein Frame gibt daher nur die Daten aus, an deren Stelle True übergeben wird. Du könntest aber auch diese Wahrheitswerte (nennt sich üblicherweise Maske) nochmal zwischenspeichern, falls du sie später noch brauchst, um sie anderweitig einzusetzen. Ich weiß, das zerstört ein bisschen die Magie, aber es ist im Umgang mit Pandas schon ganz gut zu wissen, was da intern alles abläuft.
Du kannst ja mal ausprobieren, was ein print(df.year==2014) ergibt.

Re: minimalWert aus einem Pandadataframe
Verfasst: Mittwoch 21. Oktober 2020, 15:43
von Schokomuffin
Okay, vielen Dank!
