2017-08-09 89 views
0

我想爲列TypePhase添加虛擬變量。python:打開虛擬變量

wm_id         TypePhase 
    2     ['N', 'A', 'B', 'C', 'D'] 
    2     ['N', 'A', 'B', 'C', 'D'] 
    3     ['N', 'W', 'A', 'B', 'C', 'D'] 
    2     ['N', 'A', 'B', 'C', 'D'] 
    3     ['N', 'P', 'A', 'B', 'C', 'D'] 
    2     ['N', 'A', 'B', 'C', 'D'] 

我試過df.TypePhase = df.TypePhase.apply(lambda s : '_'.join(s))但我沒有得到預期的結果。我知道我需要申請

pd.get_dummies(df_new['TypePhase']).rename(columns=lambda x: 'AAAAAAAAA_' + str(x)) 

但我不明白。 請問,有什麼建議? 很多預先感謝。 carlo

+0

我檢查出有MultiLabelBinarizer提供溶膠。 –

+0

關閉但沒有完全解決它。它將「',F N R S W [] a g h i n o p s t」作爲錯誤的虛擬變量列表。 –

+0

我也嘗試了其他解決方案,但它不起作用。 –

回答

1

我認爲所有的值都是TypePhase列中的字符串,所以可以使用str.get_dummies加雙str.strip

最後join改爲原創。

pop函數從原始中提取列,所以不需要刪除它。

print (type(df.loc[0, 'TypePhase'])) 
<class 'str'> 

df1 = df.pop('TypePhase').str.strip('[]').str.get_dummies(', ') 
#remove ' from new column names 
df1.columns = df1.columns.str.strip("'") 

df = df.join(df1) 
print (df) 
    wm_id A B C D N P W 
0  2 1 1 1 1 1 0 0 
1  2 1 1 1 1 1 0 0 
2  3 1 1 1 1 1 0 1 
3  2 1 1 1 1 1 0 0 
4  3 1 1 1 1 1 1 0 
5  2 1 1 1 1 1 0 0 
+0

是的,這是正確的。問題解決了。許多感謝Jezrael。 –

+0

超級,我認爲第一個值是列表。謝謝。 – jezrael

+1

你是什麼意思與「我認爲第一個值是列表」? –