循环实现:在DataFrame中获取各流派的热门歌手
解决方法:用Pandas快速获取各流派最热门歌手
不用写循环,Pandas的分组统计功能就能高效解决这个问题,假设歌手出现的频次代表受欢迎程度,直接按流派分组后统计歌手热度即可:
基础版(取每个流派热度最高的单个歌手)
# 按流派分组,统计每个流派内歌手的出现次数,取次数最多的歌手 top_singers = df2.groupby('genre')['singer'].apply(lambda x: x.value_counts().idxmax()) # 转成清晰的DataFrame格式查看 top_singers_df = top_singers.reset_index(name='top_singer') print(top_singers_df)
代码说明:
groupby('genre'):把数据按流派分成不同的组x.value_counts():统计当前流派下每个歌手的出现次数idxmax():直接返回次数最多的歌手名称
进阶版(处理并列第一的情况)
如果同一个流派有多个歌手热度相同(并列第一),可以用下面的代码获取所有并列的歌手:
def get_top_singers(group): counts = group.value_counts() max_count = counts.max() # 返回所有热度等于最高值的歌手列表 return counts[counts == max_count].index.tolist() # 按流派分组应用自定义函数 top_singers = df2.groupby('genre')['singer'].apply(get_top_singers) print(top_singers)
这种写法比手动写循环简洁得多,而且Pandas的内置分组操作性能远优于Python循环,尤其是数据量较大的时候。
内容的提问来源于stack exchange,提问作者P.08
相关产品推荐
相关产品推荐

