如何用Pandas统计两座城市每周各天的音乐播放量?
修复Pandas播放量统计函数并实现需求
原代码的问题点
- 遍历DataFrame方式错误:
for track_list in df只会循环列名,而非每一行数据,得用df.iterrows()来遍历行 - if语句末尾缺冒号
:,语法不合法 - 没有对符合条件的行做计数累加,也没返回统计结果
- 调用函数时
Monday、Springfield没加引号,会被当作变量而非字符串处理
修正后的number_tracks函数(for循环+if实现)
def number_tracks(day, city): track_list_count = 0 # 用iterrows()遍历每一行,index是行索引,row是行数据 for index, row in df.iterrows(): # 修正语法,添加冒号,判断当前行是否匹配指定日期和城市 if day == row['day'] and city == row['city']: track_list_count += 1 # 返回最终统计的播放量 return track_list_count
调用函数输出指定6项统计结果
假设需要统计的6项为Springfield和Shelbyville的周一、周二、周三播放量(可按实际需求调整日期):
# 参数要以字符串形式传入,避免变量未定义错误 print("Springfield 周一播放量:", number_tracks('Monday', 'Springfield')) print("Springfield 周二播放量:", number_tracks('Tuesday', 'Springfield')) print("Springfield 周三播放量:", number_tracks('Wednesday', 'Springfield')) print("Shelbyville 周一播放量:", number_tracks('Monday', 'Shelbyville')) print("Shelbyville 周二播放量:", number_tracks('Tuesday', 'Shelbyville')) print("Shelbyville 周三播放量:", number_tracks('Wednesday', 'Shelbyville'))
额外优化(可选)
如果不限制必须用for循环,用Pandas逻辑索引会更高效:
def number_tracks(day, city): # 直接过滤符合条件的行,返回行数即为播放量 return len(df[(df['day'] == day) & (df['city'] == city)])
内容的提问来源于stack exchange,提问作者DonFidelis
相关产品推荐
相关产品推荐

