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

遍历列表更新Pandas DataFrame列值被覆盖如何解决

问题原因

你的代码逻辑从根上就错了:

  1. 每次调用home_or_away时都会全量重写home_or_away整列的值:只要当前遍历的队伍不是该行的主队,就直接把值设为0
  2. 循环遍历主队列表时,后一次运行会完全覆盖前一次生成的所有标记,最终只有最后一个被遍历到的主队对应的行能正确标1,其余所有行的标记都会被错误刷成0
  3. 主客场判断是行级逻辑,根本不需要遍历所有主队做逐队匹配,循环操作完全多余。

正确实现

根据你的数据集结构选对应方案即可:

情况1:原始表是每场比赛占一行的宽表,包含home_team(主队)、away_team(客队)字段

这种结构没法直接在原表加单一主客场列(每场对应两支参赛队),需要先转成每支球队单场占一行的长表,同步生成主客场标记:

import pandas as pd
import numpy as np

# 宽表转长表,保留其余赛事字段
df_long = df.melt(
    id_vars=[c for c in df.columns if c not in ["home_team", "away_team"]],
    value_name="team",
    var_name="tmp_type"
)
# 生成主客场标记:来源为主队列记1,客队列记0
df_long["home_or_away"] = np.where(df_long["tmp_type"] == "home_team", 1, 0)
df_long = df_long.drop(columns=["tmp_type"])

处理完的df_long每一行对应一支球队的单场参赛记录,home_or_away列就是你需要的标记。

情况2:已经是每支球队单场占一行的长表,包含home_team(该场主队名)、team(当前行对应参赛球队名)字段

不需要写循环、不需要自定义函数,一行代码直接按行判断生成结果即可:

import numpy as np
df["home_or_away"] = np.where(df["team"] == df["home_team"], 1, 0)

注:如果你的参赛球队列名不是team,把代码里的team替换成你表里实际的球队列名就行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 10:18:18