Groupby and Sort

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Knut Hanson
User
Beiträge: 7
Registriert: Montag 11. Dezember 2017, 13:12

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
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Knut Hanson
User
Beiträge: 7
Registriert: Montag 11. Dezember 2017, 13:12

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)
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Und was war die Fehlermeldung bei `sort_value`?
Knut Hanson
User
Beiträge: 7
Registriert: Montag 11. Dezember 2017, 13:12

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'
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Knut Hanson: heißt ja auch `sort_values`.
Knut Hanson
User
Beiträge: 7
Registriert: Montag 11. Dezember 2017, 13:12

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
Antworten