You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame使用for循环查询各年龄最快运动员结果不全问题

问题原因
  • 没有汇总存储每次循环的结果:你在for循环内部每次迭代都会覆盖athletes_data_dict变量,没有将每个年龄的计算结果存入统一的容器,最终返回的只能是最后一次循环的输出。
  • 循环遍历逻辑错误:你没有使用传入的ages参数,而是硬编码了range(10,16),由于range是左闭右开区间,实际只会遍历10-15岁,既不支持自定义年龄输入,也会漏处理16岁的样本。
  • 字段硬编码:提取成绩时写死了"100m",如果传入其他径赛项目参数会得到错误结果。
  • 字段提取方式不稳定:通过转字符串再拆分的方式取字段值很容易出问题,一旦姓名、成绩的格式有变动就会报错,直接取DataFrame行的字段值更稳妥。
修正后实现代码
import pandas as pd

def find_fastest_athletes(df, distance, gender, ages):
    # 初始化总结果字典,用于存储所有年龄的结果
    result = {}
    # 遍历传入的年龄列表,而非硬编码range
    for age in ages:
        # 筛选对应性别、年龄的运动员
        filtered = df[(df["gender"] == gender) & (df["age"] == age)]
        if filtered.empty:
            # 无对应数据可自行调整处理逻辑,此处直接跳过
            continue
        # 按指定项目升序排序,第一个即为最快运动员
        fastest = filtered.sort_values(distance, ascending=True).iloc[0]
        # 组装当前年龄的运动员信息
        athlete_info = {
            "forename": fastest["forename"],
            "surname": fastest["surname"],
            "time": str(fastest[distance])
        }
        # 以年龄为键存入总结果
        result[age] = athlete_info
    return result

def main(filename='athletes.csv'):
    df = pd.read_csv(filename, index_col=0)
    # 所有径赛项目统一转float,适配不同项目查询需求
    race_items = ["100m", "200m", "400m", "800m", "1500m"]
    df[race_items] = df[race_items].astype(float)
    # 测试调用
    fastest_athletes = find_fastest_athletes(df,"100m","F",[10,11,12,13,14,15,16])
    print(fastest_athletes)

if __name__ == "__main__":
    main()
实现说明

函数开头初始化空的结果字典,每次循环处理完对应年龄的最快运动员后,直接以年龄为键、运动员信息字典为值存入总结果,最终返回的字典完全符合要求的输出格式,和示例输出一致。

内容的提问来源于stack exchange,提问作者Polina99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:36:10