Seite 1 von 1

Groupby and Sort

Verfasst: Dienstag 12. Dezember 2017, 09:41
von Knut Hanson
Guten Morgen,

ich möchte mich nochmal für die schnelle Unterstützung bedanke. (Danke Tobias R.) :D
Es hat schon bei der Anmeldung gestockt. War mein Fehler, wenn es mal schnell gehen soll.

So, jetzt zu meinem Problem!

Ich habe eine csv Datei. (tmdb-movies.csv)
In dieser Datei sind 21 Spalten mit unterschiedlichen Dateitypen.
(135397 tt0369610 32.985763 150000000 1513528810 Jurassic World Chris Pratt|Bryce Dallas Howard|Irrfan Khan|Vi... )

Ich möchte jetzt gerne eine Spalte gruppieren (genres) und eine andere wird zusammen addiert (popularity).
Die Spalte (popularity) möchte ich anschließend der Größe nach sortieren.

Jetzt hänge ich schon gut eine Woche an dem Problem und komme nicht weiter. Alle mir bekannten Lösungen habe immer eine Fehlermeldung rausgeschickt, statt dem Ergebnis.

Mein Code sieht wie folgt aus:

Code: Alles auswählen

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

movie_df = pd.read_csv('tmdb-movies.csv')

var = movie_df.groupby('genres')['popularity'].sum().reset_index(name='popularity')
varlist = var.sort()
print varlist[-3:]
Fehlermeldung bei diesem Code ist:
AttributeError: 'DataFrame' object has no attribute 'sort'

Erläuterung zum Code:
groupby ('genres') - gruppieren der Genre
['popularity'].sum - addiere alle Filme mit dem gleichen Genre
Da nach dem "Groupby" Befehl die Überschrift bei "Popularity" fehlt, setze ich durch einen Reset den Index zurück und definiere ihn neu.
Das funktioniert auch gut, nur das Sortieren der Größe nach nicht mehr. :x

Was kann ich machen, damit ich die Liste gruppieren und sortieren kann?

Vielen Dank für eure Unterstützung im Voraus!

Gruß Knut

Re: Groupby and Sort

Verfasst: Dienstag 12. Dezember 2017, 09:59
von Sirius3
@Knut Hanson: das Problem ist, dass `sort` schon eine ganze Weile als veraltet markiert ist und inzwischen auch gelöscht wurde. Du mußt `sort_value` benutzen und mit einem Tutorial lernen, das mit einem aktuellen Pandas arbeitet.

Re: Groupby and Sort

Verfasst: Dienstag 12. Dezember 2017, 10:10
von Knut Hanson
Moin Sirius3,

auch das sort_value und sort_index habe ich schon probiert. Leider immer erfolglos. Ich habe sämtliche englischen Foren gelesen und auch bei euch gesucht.
Leider konnte ich noch keine passende Lösung finden.

Das mit dem Lernen will ich auch hinbekommen. Es gibt leider zu viele Möglichkeiten sich mit dem Thema zu beschäftigen.
Ich brauche es gerade für den Job und muss es mir schnell selber beibringen.
Die Codes schreibe ich momentan in Jupyter.
Könnt ihr mir etwas empfehlen, womit man gut lernen kann? (Bücher, PDF, Internetseiten, Software)

Re: Groupby and Sort

Verfasst: Dienstag 12. Dezember 2017, 11:16
von Sirius3
Und was war die Fehlermeldung bei `sort_value`?

Re: Groupby and Sort

Verfasst: Dienstag 12. Dezember 2017, 13:40
von Knut Hanson

Code: Alles auswählen

var = movie_df.groupby('genres')['popularity'].sum().reset_index(name='popularity')
varlist = var.sort_value(['genres', 'popularity'], ascending=[True, False], inplace=True)
varlist
Fehlercode:
AttributeError: 'DataFrame' object has no attribute 'sort_value'

Re: Groupby and Sort

Verfasst: Dienstag 12. Dezember 2017, 14:15
von Sirius3
@Knut Hanson: heißt ja auch `sort_values`.

Re: Groupby and Sort

Verfasst: Dienstag 12. Dezember 2017, 15:31
von Knut Hanson
Verrückt! Es klappt, aber das ist der Unterschied zwischen uns.
Ihr seht den Fehler sofort und ich recherchiere im Netz und such mir einen Wolf.
Vielen Dank!

In der Datei von oben gibt es eine Spalte "release_year".
Ich möchte gerne die Spalte gruppieren und dann zählen lassen wie oft das "release_year" vorkommt.
Wahrscheinlich bin ich wieder blind, aber eine kleine Hilfe benötige ich dabei.

Code: Alles auswählen

movie_RY = movie_cl.groupby('release_year'),(len('release_year'))
movie_RY
Bin ich mit dem Code auf dem richtigen Wege oder ist es so nicht umsetzbar?

Edit
Ich war auf dem richtigem Wege!
Hier meine Lösung:

Code: Alles auswählen

movie_RY = movie_cl.groupby('release_year').count()
Danke, Knut