代码之家  ›  专栏  ›  技术社区  ›  spearrow

通过if-else语句创建列

  •  0
  • spearrow  · 技术社区  · 11 月前

    我有一个4列的数据框。列为: 首页_团队 等待_团队 首页_团队_煤炭 等待_团队_目标

    我想用目标来创建一个赢家专栏。我写了下面的代码,但当我运行它时,我只得到获胜者栏中的主队。

    
    A = ['A', '1', 'D', '2']
    B = ['B', '2', 'E', '2']
    C = ['C', '3', 'F', '2']
    
    df = pd.DataFrame(np.array([A,B,C]), columns = ['Home_team', 'Home_team_goal', 'Away_team', 'Away_team_goal'])
    
    df['Home_team_goal'] = pd.to_numeric(df['Home_team_goal'])
    df['Away_team_goal'] = pd.to_numeric(df['Away_team_goal'])
    
    
    
    df['Average'] = df['Home_team_goal'] - df['Away_team_goal']
    
    df['Winner'] = ''
    
    for i, e in enumerate(df['Average']):
        if e > 0:
            df['Winner'] = df['Home_team']
        elif e < 0:
            df['Winner'] = df['Away_team']
        else:
            df['Winner'] = 'Tie'
    
    
    3 回复  |  直到 11 月前
        1
  •  2
  •   user19077881    11 月前

    这可以使用Numpy.select完成:

    import numpy as np
    cond1 = df['Home_team_goal'] > df['Away_team_goal']
    cond2 = df['Home_team_goal'] < df['Away_team_goal']
    
    df['Winner'] = np.select([cond1, cond2], ['Home_team', 'Away_team'], default = 'Tie')
    
        2
  •  0
  •   Orhan Serçe    11 月前

    这里有另一种方法:

    def Winner(x):
    if x > 0:
        return 1
    elif x < 0:
        return 2
    else:
        return 0
    
    df['Winner'] = df['Average'].apply(Winner)
    
        3
  •  0
  •   ticktalk    11 月前

    另外(在这里键入太尴尬了,无法发表评论。。。。

    df['Average'] = df['Home_team_goal'] - df['Away_team_goal']
    

    将投掷 TypeError: unsupported operand type(s) for -: 'str' and 'str'

    你需要将它们转换为整数

    df['Home_team_goal'] = df['Home_team_goal'].astype(int)
    df['Away_team_goal'] = df['Away_team_goal'].astype(int)