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

如何将pandas iterrows遍历的for循环改写为列表推导式

问题修正方案

1. 原代码逻辑问题

你最初写的for循环本身存在错误:循环内每次赋值都会覆盖df_olym['Medals_team']整列的所有值,最终整列只会保留循环最后一行的计算结果,无法输出每行对应的正确值。

2. 列表推导式写法修正

Python列表推导式不支持你尝试的逗号分隔中间变量赋值语法,你不需要单独声明event/team/year/medal变量,直接从行对象item中取对应字段传入medal_count的key即可,同时要注意处理item.Medal == 0的行的默认值,保证最终生成的列表长度和DataFrame的行数一致,避免赋值报错。

正确写法如下:

df_olym['Medals_team'] = [
    item.Medals_Won / medal_count[(item.Event, item.Team, item.Year, item.Medal)]
    if item.Medal != 0
    else 0  # 可根据业务需求修改Medal为0时的默认值,比如替换为pd.NA
    for i, item in df_olym.iterrows()
]

3. 性能优化建议

iterrows遍历的效率很低,如果你的DataFrame数据量较大,更推荐使用pandas原生的apply方法实现,运行速度会明显提升:

df_olym['Medals_team'] = df_olym.apply(
    lambda row: row.Medals_Won / medal_count[(row.Event, row.Team, row.Year, row.Medal)] if row.Medal != 0 else 0,
    axis=1
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:57:03