如何从Python groupby提取值以构建Spotify音乐口味多样性评分?
问题:提取Spotify聚类分组数据用于计算音乐口味多样性评分
我是Python新手,正在使用Spotify的spotipy包尝试为我的Spotify顶级艺术家创建“音乐口味多样性评分”。我已基于Spotify的7个内置特征对所有艺术家的歌曲进行聚类,并通过以下代码展示了每个聚类中的歌曲数量以及聚类中的艺术家分布,但难以将这些值转换为可用的numpy数组或DataFrame来生成评分。
# 展示聚类分布 df2 = df.groupby(['cluster group'])['artist'].size() df2
输出:按聚类分组的歌曲数量统计(结构:以cluster group为索引,对应值为该聚类的歌曲总数)
# 展示聚类组中的艺术家分布 df2 = df.groupby(['cluster group', 'artist']).size() df2
输出:按聚类+艺术家分组的歌曲数量统计(结构:多级索引为cluster group和artist,对应值为该艺术家在该聚类中的歌曲数)
我尝试过遍历cluster中的artist等方法,但df2中似乎只能迭代到每个聚类中艺术家的计数,想知道如何提取每个聚类组的值以便使用?
解决方案
1. 将分组统计结果转换为DataFrame
你得到的df2是带索引的Series对象,只需调用.reset_index()就能将其转换为标准DataFrame,同时可以给计数列命名:
转换聚类分布数据
# 转换为DataFrame,并重命名计数列为song_count cluster_dist_df = df.groupby(['cluster group'])['artist'].size().reset_index(name='song_count') print(cluster_dist_df)
转换后DataFrame结构示例:
| cluster group | song_count |
|---|---|
| 0 | 120 |
| 1 | 85 |
| ... | ... |
转换聚类内艺术家分布数据
# 转换为DataFrame,重命名计数列 artist_cluster_df = df.groupby(['cluster group', 'artist']).size().reset_index(name='song_count') print(artist_cluster_df)
转换后DataFrame结构示例:
| cluster group | artist | song_count |
|---|---|---|
| 0 | Artist A | 45 |
| 0 | Artist B | 30 |
| 1 | Artist C | 28 |
| ... | ... | ... |
2. 提取特定聚类组的数据
转换为DataFrame后,就可以用常规筛选方法提取目标聚类的数据:
# 提取聚类组0的所有艺术家数据 cluster_0_data = artist_cluster_df.loc[artist_cluster_df['cluster group'] == 0] # 转换为numpy数组 cluster_0_array = cluster_0_data.to_numpy() print(cluster_0_array)
3. 直接遍历聚类分组对象
如果不想转DataFrame,也可以直接遍历原始分组对象获取数据:
# 遍历每个聚类分组,获取分组名和对应的数据 for cluster_name, group_data in df.groupby(['cluster group']): print(f"聚类组: {cluster_name}") print(f"该组所有数据:\n{group_data}") # 提取该聚类下的所有独特艺术家 artists_in_cluster = group_data['artist'].unique() print(f"该组艺术家: {artists_in_cluster}\n")
内容的提问来源于stack exchange,提问作者surfingpenguin
相关产品推荐
相关产品推荐

