首页 文章

如何根据应用于其他两列的函数更改列中的值

提问于
浏览
1

所以我有一个如下所示的数据框DF:DF:

match_id        team        teamA_Win  Outcome
1               A           True        None
2               B           True        None
3               A           False       None

此df中的结果列填充字符串'None'

我想要的是能够根据team和teamA_win中的值将结果中的字符串值更改为“Win”或“Loss” .

例如,如果Team == A和TeamA_win = True为True,则结果应为Win . 但是,如果Team == A和TeamA_Win = False,则结果为Loss . 同样,如果Team == B且TeamA_Win = True,则结果应为Loss .

我创建了以下功能:

def win(x):
    if (x['team']=='A')& (x['teamA_win']==True):
        x['outcome']='Win'
    elif ((x['team']=='A')& (x['teamA_win']==False)):
        x['outcome']='Loss'
    elif ((x['team']=='B')& (x['teamA_win']==True)):
        x['outcome']='Loss'    
    elif ((x['team']=='B')& (x['teamA_win']==False)):
        x['outcome']='Win'

现在,当我调用win(DF)时,我得到错误:系列的真值是模棱两可的 . 使用a.empty,a.bool(),a.item(),a.any()或a.all() .

有关如何解决此问题的任何想法?或者如果有更简单的方法来解决这种情况?

2 回答

  • 0

    您可以使用 np.select ,这将允许您定义条件及其可能的值,如下所示:

    import pandas as pd
    import numpy as np
    
    def win(x):
        conditions = [
            (x['team']=='A') & (x['teamA_win']==True),
            (x['team']=='A') & (x['teamA_win']==False),
            (x['team']=='B') & (x['teamA_win']==True),
            (x['team']=='B') & (x['teamA_win']==False)]
    
        choices = ['Win', 'Loss', 'Loss', 'Win']
    
        x['outcome'] = np.select(conditions, choices)
    

    希望能帮助到你 .

  • 0

    或者两行,使 'Outcome'False ,并使用 loc 检查 'team' 列是否等于 'teamA_Win''A' 替换 True 和用 'B' 替换 False ,如果是,则使 'Outcome'True

    df['Outcome']=False
    df.loc[df['team']==df['teamA_Win'].map({True:'A',False:'B'}),'Outcome']=True
    

    输出:

    match_id team teamA_Win Outcome
    0         1    A      True    True
    1         2    B      True   False
    2         3    A     False   False
    

相关问题