gpt4 book ai didi

Pandas 按列中的每个值分组

转载 作者:行者123 更新时间:2023-12-04 08:50:40 25 4
gpt4 key购买 nike

我的数据集如下所示:
enter image description here

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"]})
我想分别获得每种电影类型的每种性别的评分计数。
预期输出:
[1]: /image/k6PTV.png
在预期输出中,我们按性别分组,并希望计算每个性别对特定电影类型进行评分的次数(即使电影有更多电影类型)。
代码直到现在,但没有给出正确的输出:
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

关于Pandas 按列中的每个值分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64114950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com