python - 如何编写一个需要一行并返回二维元组列表的函数
问题描述
所以我正在研究这个数据集。
我想取一行并返回二维元组。例如,对于第 0 行,它返回:[('Action', 7.9), ('Adventure', 7.9), ('Fantasy', 7.9), ('Sci-Fi', 7.9)]。这样电影中的每种类型都将是相同的 imdb 分数。
这是来自一个学校项目,我想不出办法可以做到这一点。谁能帮我?
对不起,由于这个问题缺乏细节,我现在将尝试列出所有细节。
数据集是 movie_metadata.csv。我似乎无法在此处附加文件。
在我得到函数后,我应该将该函数应用于所有行,直到我有一个包含所有二维元组的列表。然后我必须将元组列表转换为数据框。理想情况下,我想创建一个名为“genre_score”的新数据集,它有两列:genre 和 imdb_score。每行将只有一个流派和该流派的电影的 IMDB 评级。然后我必须计算每个流派的平均 IMDB 评级并制作下图。
除了功能之外,我可能可以用其他所有东西来解决问题。编写函数对我来说是一场斗争。
解决方案
使用列表推导,将值拆分为|
:
df = pd.DataFrame({'genres':['Action|Adventure|Fantasy|Sci-Fi','Action|Adventure|Fantasy'],
'imdb_score':[7.9,7.1]})
print (df)
genres imdb_score
0 Action|Adventure|Fantasy|Sci-Fi 7.9
1 Action|Adventure|Fantasy 7.1
row = 0
L = [(x, i) for g,i in df.loc[[row], ['genres','imdb_score']].values for x in g.split('|')]
print (L)
[('Action', 7.9), ('Adventure', 7.9), ('Fantasy', 7.9), ('Sci-Fi', 7.9)]
编辑:Series.str.get_dummies
用于指标列,多个 by DataFrame.mul
,替换0
为缺失值并获取mean
s,最后转换Series
为DataFrame
bySeries.rename_axis
和Series.reset_index
:
df1 = (df['genres'].str.get_dummies()
.replace(0, np.nan)
.mul(df['imdb_score'], axis=0)
.mean()
.rename_axis('genres')
.reset_index(name='imdb_score'))
print (df1)
genres imdb_score
0 Action 7.5
1 Adventure 7.5
2 Fantasy 7.5
3 Sci-Fi 7.9
另一种解决方案是Series.str.split
用于列表和DataFrame.explode
最后聚合mean
:
df1 = (df.assign(genres=df['genres'].str.split('|'))
.explode('genres')
.groupby('genres', as_index=False)['imdb_score']
.mean())
print (df1)
genres imdb_score
0 Action 7.5
1 Adventure 7.5
2 Fantasy 7.5
3 Sci-Fi 7.9
推荐阅读
- php - WordPress 管理员 ajax 无法正常工作
- python - 递归地将文本从一行添加到另一行
- java - 如果 Edittext 没有输入文本,如何显示敬酒?
- javascript - Apollo 客户端查询缺少字段 __typename
- javascript - 如何清除对输入表单上的“onKeyDown”做出反应的状态?
- javascript - 没有音频标签的 chrome 上没有来自 WebRCT 流的音频
- javascript - JQuery 有时会将用户带到页面顶部
- python - 在 HDFS 中为 Livy PySpark 存储 Python 包
- r - 创建一个包含数据框行 ID 的向量
- python - 提高 StopIteration - 不能在我的 MongoDB 上使用可尾光标