Key mit höchstem Value von dict pro Zeile in df

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
01010100-01000010
User
Beiträge: 4
Registriert: Dienstag 22. November 2022, 17:56

Hi Zusammen

Ich habe folgendes df:

book_id genres
1780947 {'fiction': 17, 'non-fiction': 9}
567795 {'romance': 88, 'non-fiction': 193}
6392654 {'fiction': 43, 'non-fiction': 5, 'fantasy': 100}
36216607 {'fiction': 17, 'poetry': 1}
21031 {'fiction': 489, 'history': 51}

Die Spalte Genre beinhaltet ein dict mit den paaren Genre und Anzahl
Ich würde jetzt gerne für jede book_id das Genre mit den höchsten Anzahl auslesen.
Also z.b. so:

book_id genres
1780947 fiction
567795 non-fiction
6392654 fantasy
36216607 fiction
21031 fiction

Um der Max wert von einem Dict auszulesen habe ich folgendes gefunden: max(stats, key=stats.get)
Wie kann ich das aber in einem df pro Zeile anwenden?

Ich bin für jede hilfe Dankbar :)
LG
Benutzeravatar
__blackjack__
User
Beiträge: 13099
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@01010100-01000010: Die erste Frage ist warum Du Wörterbücher als Werte in einer Spalte hast. Dafür ist Pandas nicht wirklich gemacht. Die Genres sollten entweder Spalten sein, oder aber es sollte eine Tabelle sein mit drei Spalten: `book_id`, `genre`, `count`. Da würde man dann sowieso hin wollen, denn dort liesse sich das ganze einfach nach Buch-ID gruppieren, und aus jeder Gruppe dann das `genre` mit dem höchsten `count`-Wert heraus picken.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
01010100-01000010
User
Beiträge: 4
Registriert: Dienstag 22. November 2022, 17:56

__blackjack__ hat geschrieben: Freitag 9. Dezember 2022, 11:12 @01010100-01000010: Die erste Frage ist warum Du Wörterbücher als Werte in einer Spalte hast. Dafür ist Pandas nicht wirklich gemacht. Die Genres sollten entweder Spalten sein, oder aber es sollte eine Tabelle sein mit drei Spalten: `book_id`, `genre`, `count`. Da würde man dann sowieso hin wollen, denn dort liesse sich das ganze einfach nach Buch-ID gruppieren, und aus jeder Gruppe dann das `genre` mit dem höchsten `count`-Wert heraus picken.
Hi @__blackjack__
Danke für deine Antwort.
Das ist ein guter Punkt, da das mein erstes CodingProjekt ist und ich keine Erfahriungen in dem Bereich mitbringe habe ich das gar nicht hinterfragt :)
Die ursprüngliche quelle ist gooreads_book_genres_initial.json von https://sites.google.com/eng.ucsd.edu/u ... raph/books
Eingelesen habe ich das ganze direkt in ein DF:
DFG = pd.read_json('.../goodreads_book_genres_initial.json', lines=True)

Wie würde ich denn am besten vorgehen um die Tabelle in deiner vorgeschlagenen Struktur zu kriegen?
Lg
Antworten