Вот способы сделать это путем выбора, используя пользовательскую функцию, которая выполняет эту работу, и панды применяются :
#list with the names of valid alternative columns
alternatives = ['123', '456', '789']
#custom function to do the selection
def pick_choice(row):
ones = row[alternatives].loc[row[alternatives] == 1]
if len(ones) == 0:
return 0
elif len(ones) > 1:
return 1
elif len(ones) == 1:
return ones.index[0]
df['choice'] = df.apply(pick_choice, axis=1)
В результате df
это:
ID Date X 123 456 789 choice
0 A 07/16/2019 .. 1 0 0 123
1 A 07/19/2019 .. 0 0 0 0
2 A 07/20/2019 .. 0 1 0 456
3 A 07/22/2019 .. 1 0 0 123
4 A 07/23/2019 .. 0 1 1 1
5 B 07/27/2019 .. 0 0 1 789
6 B 07/28/2019 .. 0 0 0 0
7 B 07/30/2019 .. 0 0 0 0
Обратите внимание, что dtype
столбца 'choice'
равен object
, а не int
, поскольку имена столбцов являются строками (даже если у вас есть целые числа).