2017-12-27 467 views
0

我有一個數據幀結構爲這樣: dataframe snapshot變換多列爲一家擁有熊貓

我想知道最有效的方式是大熊貓創造,其提取ISN任何值的新列「舞臺」什麼't'None'在四列中,並將該值用於'stage'列。然後可以在stage列已經提取出每行中不是None的任何值後刪除剩餘的四列。

這裏所涉及的每個列的唯一值的另一個快照: unique values

請注意,在相關的列中的值是字符串類型,無不是真正Nonetype。

+3

你不介意分享實際數據框代替作爲圖片的代碼? – user32185

回答

1
df['New']=df[['A','B','C']].replace('None','').sum(1) 
df 
Out[1477]: 
     A  B  C New 
0 None  B None B 
1  A None None A 
2 None None  C C 

數據輸入

df=pd.DataFrame({'A':['None','A','None'],'B':['B','None','None'],'C':['None','None','C']}) 
+0

謝謝!那工作。我不明白代碼的.sum(1)部分。你能解釋那裏發生了什麼? –

+0

@ KeenanBurke-Pitts sum(1),是將df逐行相加,它是字符串,它會將它們連接在一起:-)(PS:我將全部替換爲無)' – Wen

+0

感謝您的幫助! –

0

combine_first考慮,假設不是字面'None'的字符串。

df['stage'] = df['doggo'].combine_first(df['floorfer'])\ 
         .combine_first(df['pupper'])\ 
         .combine_first(df['puppo']) 

另外,對於乾兒的方法,使用reduce

from functools import reduce 
... 

df['stage'] = reduce(lambda x,y: x.combine_first(y), 
        [df['doggo'], df['floorfer'], df['pupper'], df['puppo']])