0
には、重複キーの複数の値を集計して1つのキーに合計することに関する質問がありました。たとえば、次のように 1:5 2:4 3:2 1:4 非常に基本的なしかし、私はのような出力を探しています: 1:9 2:4 3:21つの列の値を2つのファイルから別の列に対応する値で集計する
私が使用している2つのファイルでは、artistID(列2)を持つ51人のユーザー(user_artists.datの1列目)のリストと、ユーザーがその特定のアーティストを重量で指定した回数第3欄)。
アーティストが再生された合計時間をすべてのユーザーに集計し、 Britney Spears(289)2393140のような形式で表示しようとしています。助けや意見があれば幸いです。
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)
こんにちは!返答いただきありがとうございます、 'items'は定義されていませんか?私はそれが何であるか、それがどのように初期化されなければならないのかを理解しようとしてきた。 – pythonuser890
ええ、それは申し訳ありません、それは私が意図したタイプミスでした ".iteritems()"は ".iter(items)"と書くことで終わった –
ありがとう! ValueError:ディクショナリ更新シーケンス要素#0の長さは4です。これは現在読んでいます:artist_repo = dict(x.strip()。アーティスト([1:]のxはsplit( '\ t')[:: - 1]) 2が必要です。気にしないで!本当にありがとう。 – pythonuser890