Как изменить значения в столбце на основе функции, примененной к двум другим столбцам - PullRequest
0 голосов
/ 09 декабря 2018

Итак, у меня есть DF фрейма данных, который выглядит следующим образом: DF:

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

Столбец результата в этом df заполнен строкой 'None'

То, что я хочу, эточтобы иметь возможность изменить значение строки в результате на «Победа» или «Потеря» на основе значений в команде и teamA_win.

Например, если Team == A и TeamA_win = TrueПравда, тогда исход должен быть Win.Однако если Team == A и TeamA_Win = False, то результатом будет потеря.Точно так же, если 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 голосов
/ 09 декабря 2018

Или двухстрочный, сделайте 'Outcome' столбец False и используйте loc, чтобы проверить, равен ли 'team' столбец 'teamA_Win', замените True на 'A' и False на 'B', если это так, сделать столбец '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
0 голосов
/ 09 декабря 2018

Вы можете использовать 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)

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...