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

基于DataFrame列值填充winner_id列的Python数据分析问题

问题分析与解决方案

错误原因

你遇到的核心问题是直接赋值整个列会覆盖原有数据:
第一次执行results['winner_id'] = results.loc[results['home_score'] > results['away_score'],'home_team']时,只有主队获胜的行被填充了有效值,其余行都是NaN;但第二次执行results['winner_id'] = results.loc[results['home_score'] < results['away_score'],'away_team']时,是把整个winner_id列替换成客队获胜行的取值,其他行自动变成NaN,自然就把之前主队获胜的有效数据覆盖了。


解决方案

以下是几种可行的修正方法,按需选择:

方法1:分步精准赋值(推荐,直观易维护)

先初始化空列,再用.loc定位符合条件的行单独赋值,不会覆盖已有数据:

# 先初始化空列
results['winner_id'] = None
# 填充主队获胜的情况
results.loc[results['home_score'] > results['away_score'], 'winner_id'] = results['home_team']
# 填充客队获胜的情况
results.loc[results['home_score'] < results['away_score'], 'winner_id'] = results['away_team']
# 可选:处理平局场景,比如设置为'平局'或其他标识
results.loc[results['home_score'] == results['away_score'], 'winner_id'] = '平局'

方法2:用numpy.where一次性处理逻辑

适合逻辑简单的场景,一行代码搞定三种情况:

import numpy as np

results['winner_id'] = np.where(
    results['home_score'] > results['away_score'],
    results['home_team'],
    np.where(
        results['home_score'] < results['away_score'],
        results['away_team'],
        '平局'  # 平局时的取值,可根据需求修改
    )
)

方法3:用apply逐行判断

如果后续需要更复杂的获胜判定逻辑,可使用此方法:

def get_winner(row):
    if row['home_score'] > row['away_score']:
        return row['home_team']
    elif row['home_score'] < row['away_score']:
        return row['away_team']
    else:
        return '平局'

results['winner_id'] = results.apply(get_winner, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 17:41:08