hatte eine Frage in Bezug auf die Summe der mehreren Werte von doppelten Schlüsseln in einem Schlüssel mit der aggregierten Summe. Zum Beispiel: 1: 5 2: 4 3: 2 1: 4 Sehr einfach, aber ich bin auf der Suche nach einem Ausgang, der wie folgt aussieht: 1: 9 2: 4 3: 2Aggregieren von Werten in einer Spalte durch den entsprechenden Wert in einem anderen von zwei Dateien
In den beiden Dateien, die ich benutze, habe ich eine Liste von 51 Benutzern (Spalte 1 von user_artists.dat), die die artistID (Spalte 2) haben und wie oft dieser Benutzer dem bestimmten Künstler zugehört hat, der durch das Gewicht angegeben wurde (Spalte 3).
Ich versuche, die Gesamtzeiten, die der Künstler gespielt wurde, über alle Benutzer zu aggregieren und es in einem Format wie anzuzeigen: Britney Spears (289) 2393140. Jede Hilfe oder Eingabe wäre so geschätzt.
import codecs
#from collections import defaultdict
with codecs.open("artists.dat", encoding = "utf-8") as f:
artists = f.readlines()
with codecs.open("user_artists.dat", encoding = "utf-8") as f:
users = f.readlines()
artist_list = [x.strip().split('\t') for x in artists][1:]
user_stats_list = [x.strip().split('\t') for x in users][1:]
artists = {}
for a in artist_list:
artistID, name = a[0], a[1]
artists[artistID] = name
grouped_user_stats = {}
for u in user_stats_list:
userID, artistID, weight = u
grouped_user_stats[artistID] = grouped_user_stats[artistID].astype(int)
grouped_user_stats[weight] = grouped_user_stats[weight].astype(int)
for artistID, weight in u:
grouped_user_stats.groupby('artistID')['weight'].sum()
print(grouped_user_stats.groupby('artistID')['weight'].sum())
#if userID not in grouped_user_stats:
#grouped_user_stats[userID] = { artistID: {'name': artists[artistID], 'plays': 1} }
#else:
#if artistID not in grouped_user_stats[userID]:
#grouped_user_stats[userID][artistID] = {'name': artists[artistID], 'plays': 1}
#else:
#grouped_user_stats[userID][artistID]['plays'] += 1
#print('this never happens')
#print(grouped_user_stats)
Hallo! Danke für die Antwort, 'Artikel' ist nicht definiert? Ich habe versucht herauszufinden, was es sein soll oder wie es initialisiert werden sollte und es nicht zum Laufen bringen kann. – pythonuser890
yeah, sorry darüber, es war ein Tippfehler ich beabsichtigte ".iteritems()" endete mit dem Schreiben von ".iter (items)" –
Danke! Es liest jetzt: artist_repo = dict (x.strip(). Split ('\ t') [:: - 1] für x in artists [1:]) ValueError: Wörterbuchaktualisierungssequenzelement # 0 hat Länge 4; 2 ist erforderlich. Vergiss es! Vielen Dank. – pythonuser890