基于Pandas计算各阶段参与歌手数,找出歌手最多的阶段
解决方法
你之前的问题出在分组对象搞反了——要找阶段对应的歌手数量,得按阶段分组,而不是singer。另外因为同一个歌手可能在同一个阶段有多条记录(比如唱了多首歌),必须去重统计,不然会重复计数。
具体步骤和代码:
- 先清理空值(避免统计出错,可选但推荐):
# 移除阶段或歌手字段为空的记录 df = df.dropna(subset=['阶段', 'singer'])
- 按阶段分组,统计每个阶段的唯一歌手数量:
# 分组后对singer字段去重计数 stage_singer_stats = df.groupby('阶段')['singer'].nunique()
- 找出歌手最多的阶段:
# 获取歌手数最多的阶段名称 top_stage = stage_singer_stats.idxmax() # 获取对应的歌手数量 top_count = stage_singer_stats.max() print(f"参与歌手最多的阶段是:{top_stage},共{top_count}位歌手")
- 如果有多个阶段歌手数并列第一,用下面的代码获取所有并列阶段:
top_stages = stage_singer_stats[stage_singer_stats == top_count].index.tolist() print(f"参与歌手最多的阶段有:{', '.join(top_stages)},均有{top_count}位歌手")
为什么之前的方法不对?
你用df.groupby('singer')得到的是每个歌手对应的阶段信息,和你要统计「每个阶段的歌手数量」的需求完全相反。而且直接用count()会把同一个歌手在同一阶段的多条记录重复计算,必须用nunique()统计唯一值数量,才是真实的歌手人数。
内容的提问来源于stack exchange,提问作者user20320394
相关产品推荐
相关产品推荐

