如何在Python中找出两个DataFrame中涉及美国歌手最多的版本
解决步骤
要找出涉及美国歌手数量最多的版本,我们需要先处理多值歌手ID、关联国籍数据,再按版本统计去重后的美国歌手数量,具体操作如下:
1. 拆分music中的多歌手ID
music表的歌手ID存在单个值和元组两种格式,先将所有歌手ID拆分为每行一个ID的结构:
import pandas as pd # 统一将歌手ID转为元组格式,再拆分展开 music_expanded = music.assign(歌手ID=music['歌手ID'].apply(lambda x: x if isinstance(x, tuple) else (x,))).explode('歌手ID') # 转换为整数类型,方便后续关联 music_expanded['歌手ID'] = music_expanded['歌手ID'].astype(int)
2. 关联singer表筛选美国歌手
将拆分后的music_expanded与singer表通过歌手ID关联,只保留美国歌手的记录:
# 筛选美国歌手数据并关联 us_singers_in_music = pd.merge(music_expanded, singer[singer['国籍'] == 'USA'], on='歌手ID')
3. 按版本统计去重后的美国歌手数量
对每个版本,统计出现的不同美国歌手数量(去重避免同一歌手多次统计):
# 按版本分组,统计唯一歌手ID的数量 us_singer_count_by_version = us_singers_in_music.groupby('版本')['歌手ID'].nunique().sort_values(ascending=False) # 输出结果 print(us_singer_count_by_version)
结果说明
根据你提供的样本数据,运行代码后会得到:
- 版本1:涉及3位美国歌手(ID1、4、5)
- 版本2:涉及2位美国歌手(ID5、6)
- 版本3:涉及3位美国歌手(ID4、5、9)
因此版本1和版本3涉及的美国歌手数量最多,均为3位。
内容的提问来源于stack exchange,提问作者user19965401
相关产品推荐
相关产品推荐

