2017-02-17 22 views
1

У меня есть данные в довольно глупом формате, и я хочу сделать его более разумным.Собирать вместе данные в столбцах ... и зная, если он идет wong

У меня есть ряд столбцов, на которых есть ответы на вопрос, скажем: «Какая ваша любимая еда?»

 Bolognese Chips Salad Burgers 
0     Chips 
1  Bolognese 
2         Burgers 
3         Burgers 
4     Chips 

Прежде всего, я бы несколько советов о том, как свернуть эти столбцы в одну колонку:

 Fav food 
0  Chips 
1  Bolognese 
2  Burgers 
3  Burgers 
4  Chips 

ответы в этих столбцах предназначены быть взаимоисключающими, так что не должен» t любая строка с двумя ответами в ней. Какой лучший способ быть уверенным? Я просто вижу, если код для свертывания столбцов вызывает ошибку? Должен ли я проверять эксклюзивность столбцов, прежде чем я их разрушу? Есть ли принятый способ сделать это?

ответ

1

Вы можете использовать max по строкам с axis=1

In [986]: df.max(axis=1) 
Out[986]: 
0  Chips 
1 Bolognese 
2  Burgers 
3  Burgers 
4  Chips 
dtype: object 
1

Кажется, вам нужно первым fillna если NaN в df, а затем applyjoin или sum:

print (df.fillna('').apply(''.join, axis=1)) 
0  Chips 
1 Bolognese 
2  Burgers 
3  Burgers 
4  Chips 
dtype: object 

print (df.fillna('').sum(axis=1)) 
0  Chips 
1 Bolognese 
2  Burgers 
3  Burgers 
4  Chips 
dtype: object 

Другое решение с first_valid_index - получить значения от названий колонок:

print (df.apply(lambda x: x.first_valid_index(), axis=1)) 
0  Chips 
1 Bolognese 
2  Burgers 
3  Burgers 
4  Chips 
dtype: object 
+0

Отлично! Я сделаю это. – user4896331

+0

Метод first_valid_index, казалось, был самым простым в применении. Это получилось отлично, так что спасибо! Я думаю, вопрос в том, что происходит, если в строке есть два ответа? Если просто берет первый? – user4896331

+0

Ya, всегда трудно выбрать один ответ, если 2 идеальный ответ;) Рад может вам помочь! Удачи! – jezrael