熊猫通过较大的分割字符串分组单个元素

分数

我有2500万行df,其中一列电影类型用“ |”分隔 字符:

   userId  movieId  rating   timestamp                title                       genres
0       1      296     5.0  1147880044  Pulp Fiction (1994)  Comedy|Crime|Drama|Thriller
1       3      296     5.0  1439474476  Pulp Fiction (1994)  Comedy|Crime|Drama|Thriller
2       4      296     4.0  1573938898  Pulp Fiction (1994)  Comedy|Crime|Drama|Thriller
3       5      296     4.0   830786155  Pulp Fiction (1994)  Comedy|Crime|Drama|Thriller
4       7      296     4.0   835444730  Pulp Fiction (1994)  Comedy|Crime|Drama|Thriller 

我想按独特的类型获得平均评分。

我可以这样提取所有独特的流派:

genres = pd.unique(df2['genres'].str.split('|', expand=True).stack())

产生:

['Adventure' 'Animation' 'Children' 'Comedy' 'Fantasy' 'Romance' 'Drama'
 'Action' 'Crime' 'Thriller' 'Horror' 'Mystery' 'Sci-Fi' 'IMAX'
 'Documentary' 'War' 'Musical' 'Western' 'Film-Noir' '(no genres listed)']

我可以使用(设置类型等于有效类型)来隔离包含特定类型的行:

result[result['genres'].str.contains(genre)]

我发现了一些接近的东西:pandas:通过在所有行(一列)中拆分字符串值和聚合函数进行分组

但我似乎无法将语法按每种类型进行分组,因此我可以获得每种类型的平均评分。

二凡

使用DataFrame.assignSeries.str.splitDataFrame.explodeGroupBy.mean

dfg = (
    df.assign(genres=df["genres"].str.split("|"))
    .explode("genres")
    .groupby("genres", as_index=False)["rating"].mean()
)
     genres  rating
0    Comedy     4.4
1     Crime     4.4
2     Drama     4.4
3  Thriller     4.4

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章