Условный поток кадра данных pandas с несколькими столбцами

У меня есть следующий фрейм данных:

fix = pd.DataFrame()
fix ['Home'] =['A','B','C','D','E']
fix ['Away'] =['F','G','H','I','J']
fix ['GD = -2'] = [0.2,0.3,0.5,0.1,0.6]
fix ['GD = -1'] = [0.25,0.1,0.55,0.35,0.43]
fix ['GD = 0'] = [0.1,0.2,0.23,0.5,0.4]
fix ['GD = 2'] = [0.1,0.5,0.2,0.12,0.18]
fix ['GD = 1'] = [0.24,0.5,0.33,0.31,0.13]

Я хочу создать новый столбец, который будет содержать команду-победительницу на основе GD (т.е. GD + ve означает, что выиграет команда, GD -Ve означает, что выиграет команда, GD = 0 означает ничью.

поэтому я написал следующий код для тренировки нового столбца.

GDPlus = fix ['GD=1'] or fix['GD=2']
GDMins = fix ['GD= -1'] or fix['GD= -2'] 
fix['Winning_Team'] = np.select([GDPlus,GDMins],[fix.Home,fix.Away],default ='Draw')

Это вызвало у меня следующую ошибку:

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

Может ли кто-нибудь посоветовать, как это сделать?

в пандах для побитового OR используется |, но он используется для связывания логической маски.

jezrael 10.09.2018 08:12

Какой ожидаемый результат?

jezrael 10.09.2018 08:14

Это шансы? И столбец с наибольшими коэффициентами должен быть результатом?

jorijnsmit 10.09.2018 08:21
0
3
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если хотите новый столбец по значению max:

#get max values per rows
smax = fix.max(axis=1)

compare by eq (==) and check if at least one True per rows
GDPlus = fix[['GD = 1','GD = 2']].eq(smax, axis=0).any(axis=1)
GDMins = fix[['GD = -1','GD = -2']].eq(smax, axis=0).any(axis=1)

Ваше решение следует изменить, сравнив eq (==):

GDPlus = fix ['GD = 1'].eq(smax) | fix['GD = 2'].eq(smax)
GDMins = fix ['GD = -1'].eq(smax) | fix['GD = -2'] .eq(smax)

#alternative solution
#GDPlus = (fix['GD = 1'] == smax) | (fix['GD = 2'] == smax)
#GDMins = (fix['GD = -1'] == smax) | (fix['GD = -2'] == smax)

fix['Winning_Team'] = np.select([GDPlus,GDMins],[fix.Home,fix.Away],default ='Draw')
print (fix)
  Home Away  GD = -2  GD = -1  GD = 0  GD = 2  GD = 1 Winning_Team
0    A    F      0.2     0.25    0.10    0.10    0.24            F
1    B    G      0.3     0.10    0.20    0.50    0.50            B
2    C    H      0.5     0.55    0.23    0.20    0.33            H
3    D    I      0.1     0.35    0.50    0.12    0.31         Draw
4    E    J      0.6     0.43    0.40    0.18    0.13            J

Спасибо. Jez. оно работает. Не могли бы вы объяснить следующие две строчки: GDPlus = fix ['GD = 1']. Eq (smax) | fix ['GD = 2']. eq (smax) GDMins = fix ['GD = -1']. eq (smax) | fix ['GD = -2'] .eq (smax)

Zephyr 10.09.2018 08:36

.eq служит =?

Zephyr 10.09.2018 08:37

Уважаемый Jez, Спасибо за обновление решения

Zephyr 11.09.2018 09:08

Другие вопросы по теме