如何使用条件语句创建包含计算值的新列

2024-06-06 06:37:52 发布

您现在位置:Python中文网/ 问答频道 /正文

上下文:

  1. 我有一个足球比赛统计数据框
  2. 此数据帧缺少有关匹配结果的信息
  3. 因此,我试图创建一个专栏,让我知道比赛结果是“赢”还是“输”
  4. 数据框包含Home&;客场球队
  5. 当主客场进球多于客场进球时,我试图用“赢”来填充一个新的专栏
  6. 您可以在下面的代码中看到,我试图创建的新列名为“outcome”

下面的工作代码应该给我一个什么样的感觉,我正在尝试做,并做错事

for index, row in match_df.iterrows():
    if match_df.home_team_goal > match_df.away_team_goal:
        match_df.loc[index, "outcome"] = "Win"
    else:
        match_df.loc[index, "outcome"] = "Lose"

错误消息:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().


Tags: 数据代码信息dfindexmatchlocteam
3条回答

要编辑您的try:

for index, row in match_df.iterrows():
    if row['home_team_goal'] > row['away_team_goal']:
        match_df.loc[index, "outcome"] = "Win"
    else:
        match_df.loc[index, "outcome"] = "Lose"

或使用以下代码以快速获得结果:

df.outcome.fillna(np.where(df.home_team_goal > df.away_team_goal, "Win", "Lose") )

当使用pandas:np.where时,应该尝试不使用for循环

import pandas as pd; import numpy as np

match_df['outcome']=np.where(match_df.home_team_goal > match_df.away_team_goal,'win','lose')

您也可以使用以下选项:

match_df['outcome'] = 'Win'
match_df.loc[match_df.home_team_goal < match_df.away_team_goal, 'outcome'] = 'Lose'

现在:

print(match_df)

和预期的一样

相关问题 更多 >