我的数据集如下所示:
df = pd.DataFrame({"title":["movie1","movie2","movie3","movie4","movie5","movie6","movie7"],"genres":["Childrens Comedy","Comedy Drama","Western","Comedy Action","Action Childrens","Drama","Drama"],\
"rating":[3,4,1,2,5,4,2],"user_id":[1,1,4,2,2,3,5], "gender":["F","F","F","M","M","M","M"]})
我想分别获得每种电影类型对每种性别的收视率计数。
预期产量:
在预期的输出中,我们按性别分组,并希望计算每种性别在特定电影类型中给出多少分(即使电影具有更多电影类型)。
到目前为止的代码,但未提供正确的输出:
df.groupby(['genre','gender']).agg({"rating":"count"})
由于仅将完全相同的流派分组,因此无法提供正确的输出。在这种情况下,只有movie6和movie7会大喊正确的结果。
如何按类型列中的每个值分组?我不想像我已经尝试过的那样对它们进行热编码,但是电影流派在真实数据集中是如此之多,以至于根本无法正常工作。
先感谢您!
首先使用Series.str.split
将其重新设置为和相同的列DataFrame.explode
,然后通过和诱骗计数GroupBy.size
并添加0
缺失的组合:Series.unstack
DataFrame.stack
df1 = (df.assign(genres = df['genres'].str.split())
.explode('genres')
.groupby(['genres','gender'])["rating"]
.size()
.unstack(fill_value=0)
.stack()
.sort_index(level=[1,0], ascending=[False, True])
.reset_index(name='count')
)
print (df1)
genres gender count
0 Action M 2
1 Childrens M 1
2 Comedy M 1
3 Drama M 2
4 Western M 0
5 Action F 0
6 Childrens F 1
7 Comedy F 2
8 Drama F 1
9 Western F 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句