2017-02-17 55 views
1

我有一個相當愚蠢的格式的數據,我想使它更明智。收集列中的數據......並知道它是否鳴叫

我有很多列可以解答一個問題,說「你最喜歡的食物是什麼?」

 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

你可以對行使用maxaxis=1

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

看來你需要df第一fillna如果NaN然後applyjoinsum

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

雅,如果2個完美答案,總是很難選擇一個答案;)很高興能幫到你!祝你好運! – jezrael