Python的for循环中if语句无输出,如何按城市统计visit_counts访问量总和?
问题原因分析与解决方案
原有代码问题点
- 遍历逻辑错误:仅逐行判断城市名称,但求和时直接对整列访问量字段求和,计算的是全表总访问量而非对应城市的访问量总和
- 触发匹配无结果:大概率是city字段值存在前后空格、大小写差异、拼写偏差(比如代码中写的
Batle Ground大概率是拼写错误,正确拼写为Battle Ground) - 输出逻辑不合理:每匹配到一次对应城市就会打印一次全表总和,会出现大量重复输出
修复方案
1. 原有for循环写法修正
如果要保留遍历写法,需要同时取每一行的城市和对应访问量,逐行累加:
# 初始化各城市访问量总和 wl_sum = 0 l_sum = 0 d_sum = 0 bg_sum = 0 # 同时遍历城市和对应访问量 for city, count in zip(visits_19['city'], visits_19['raw_visit_counts']): if city == 'West Lafayette': wl_sum += count elif city == 'Lafayette': l_sum += count elif city == 'Dayton': d_sum += count elif city == 'Battle Ground': bg_sum += count # 遍历完成后统一打印结果 print(f"West Lafayette访问总和:{wl_sum}") print(f"Lafayette访问总和:{l_sum}") print(f"Dayton访问总和:{d_sum}") print(f"Battle Ground访问总和:{bg_sum}")
2. 推荐pandas groupby写法(已验证可行)
pandas内置的分组求和方法不需要手动写循环判断,代码更简洁效率更高:
import pandas as pd # 按城市分组直接求和 city_visit_total = df.groupby('city')['visit_counts'].sum() print(city_visit_total) # 单独获取某城市的访问量,不存在时返回0避免报错 wl_total = city_visit_total.get('West Lafayette', 0)
匹配失败排查方法
如果if条件始终不触发,先执行以下代码检查city字段的实际值:
# 打印所有唯一城市值,排查空格、大小写、拼写问题 print(df['city'].unique()) # 若存在前后空格可先清洗字段 df['city'] = df['city'].str.strip()
内容的提问来源于stack exchange,提问作者Dana
相关产品推荐
相关产品推荐

