我有以下建议:
movie_id rating_all
0 tt7653254 [{'age': 'all', 'avg_rating': 8.1, 'count': 109326}, {'age': '<18', 'avg_rating': 8.8, 'count': 318}, {'age': '18-29', 'avg_rating': 8.3, 'count': 29740}, {'age': '30-44', 'avg_rating': 8.0, 'count': 33012}, {'age': '45+', 'avg_rating': 7.7, 'count': 7875}]
1 tt8579674 [{'age': 'all', 'avg_rating': 8.6, 'count': 9420}, {'age': '<18', 'avg_rating': 9.1, 'count': 35}, {'age': '18-29', 'avg_rating': 8.7, 'count': 2437}, {'age': '30-44', 'avg_rating': 8.5, 'count': 2529}, {'age': '45+', 'avg_rating': 8.3, 'count': 960}]
2 tt7286456 [{'age': 'all', 'avg_rating': 8.6, 'count': 592441}, {'age': '<18', 'avg_rating': 9.1, 'count': 2244}, {'age': '18-29', 'avg_rating': 8.7, 'count': 160506}, {'age': '30-44', 'avg_rating': 8.5, 'count': 160158}, {'age': '45+', 'avg_rating': 8.3, 'count': 30451}]
3 tt1302006 [{'age': 'all', 'avg_rating': 8.1, 'count': 187675}, {'age': '<18', 'avg_rating': 8.7, 'count': 461}, {'age': '18-29', 'avg_rating': 8.3, 'count': 41951}, {'age': '30-44', 'avg_rating': 7.9, 'count': 59729}, {'age': '45+', 'avg_rating': 7.8, 'count': 18550}]
4 tt7131622 [{'age': 'all', 'avg_rating': 7.8, 'count': 323152}, {'age': '<18', 'avg_rating': 8.4, 'count': 955}, {'age': '18-29', 'avg_rating': 7.9, 'count': 82133}, {'age': '30-44', 'avg_rating': 7.6, 'count': 95878}, {'age': '45+', 'avg_rating': 7.5, 'count': 26383}]
5 tt8637428 [{'age': 'all', 'avg_rating': 7.7, 'count': 21362}, {'age': '<18', 'avg_rating': 8.0, 'count': 45}, {'age': '18-29', 'avg_rating': 7.9, 'count': 5901}, {'age': '30-44', 'avg_rating': 7.6, 'count': 6492}, {'age': '45+', 'avg_rating': 7.3, 'count': 2133}]
我想把它转换成:
movie_id all_avg all_count <18_avg <18_count 18-29_avg
0 tt7653254 8.1 109326 8.8 318 8.3
1 tt8579674 8.6 9420 9.1 35 8.7
2 tt7286456 8.6 592441 9.1 2244 8.7
3 tt1302006 8.1 187675 8.7 461 8.3
4 tt7131622 7.8 323152 8.4 955 7.9
5 tt8637428 7.7 21362 8 45 7.9
等等
我试过了
ratings.set_index('movie_id')['rating_all'].apply(pd.Series).reset_index()
和使用
json_normalize(data,
record_path=['rating_all'],
meta=['movie_id']).set_index('movie_id')
但没有人给出类似的东西。有没有一种简单的方法可以将字典分解成列
假设我正确地解释了您要做的事情,您可以按如下方式实现:
从(我假设的!!)开始是您的输入数据集:
其中评级值是一个实际列表,而不是一个字符串(如果它们是一个字符串,
x['ratings'] = x.ratings.apply(eval)
将它们转换为一个对象)首先,要将列表中的每一行分解为一组行:
这将给你:
等等
这是关键的一步。它类似于您尝试的
apply(pd.Series)
步骤,但区别在于groupby
。这允许我们在每个电影id中返回多行,而不是试图将返回的内容解释为一行。这感觉有点像黑客,但嘿,它是有效的现在,您可以专注于计数&;获得列表值的评级:
我在这里使用的意思是,假设每部电影和年龄组只有一行数据,sum也会起作用
相关问题 更多 >
编程相关推荐