gpt4 book ai didi

python - Pandas - groupby,其中每行都有多个值存储在列表中

转载 作者:行者123 更新时间:2023-12-01 08:20:32 24 4
gpt4 key购买 nike

我正在使用 last.fm 监听数据,并且有一个如下所示的 DataFrame:

           Artist Plays                                   Genres
0 John Coltrane 10 [jazz, modal jazz, hard bop]
1 Miles Davis 15 [jazz, cool jazz, modal jazz, hard bop]
2 Charlie Parker 20 [jazz, bebop]

我想按流派对数据进行分组,然后按每种流派的播放次数进行聚合,得到如下所示的结果:

        Genre Plays
0 jazz 45
1 modal jazz 25
2 hard bop 25
3 bebop 20
4 cool jazz 15

我已经尝试解决这个问题有一段时间了,但似乎找不到解决方案。我需要更改流派数据的存储方式吗?

我找到了this post它解决了类似的问题,但该用户只想获取每个列表值的计数。这让我大约完成了一半,但我不知道如何使用它来聚合数据框中的另一列。

最佳答案

一般来说,您不应该将列表存储在DataFrame中,所以是的,可能最好更改它们的存储方式。有了这个,您可以使用一些 join + str.get_dummies + .multiply。选择一个不会出现在任何字符串中的 sep

sep = '*'
df.Genres.apply(sep.join).str.get_dummies(sep=sep).multiply(df.Plays, axis=0).sum()

输出

bebop         20
cool jazz 15
hard bop 25
jazz 45
modal jazz 25
dtype: int64
<小时/>

如果您的列表被跨行分割,则更容易使用的表单如下:

import pandas as pd
df1 = pd.concat([pd.DataFrame(df.Genres.values.tolist()).stack().reset_index(1, drop=True).to_frame('Genres'),
df[['Plays', 'Artist']]], axis=1)

Genres Plays Artist
0 jazz 10 John Coltrane
0 modal jazz 10 John Coltrane
0 hard bop 10 John Coltrane
1 jazz 15 Miles Davis
1 cool jazz 15 Miles Davis
1 modal jazz 15 Miles Davis
1 hard bop 15 Miles Davis
2 jazz 20 Charlie Parker
2 bebop 20 Charlie Parker

使其成为流派内的简单求和:

df1.groupby('Genres').Plays.sum()

Genres
bebop 20
cool jazz 15
hard bop 25
jazz 45
modal jazz 25
Name: Plays, dtype: int64

关于python - Pandas - groupby,其中每行都有多个值存储在列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54677446/

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