2016-04-11 177 views
3

布爾列我有熊貓數據幀柱廣場,它看起來像這樣:熊貓 - 創建類別列

**Place** 
Berlin 
Prague 
Mexico 
Prague 
Mexico 
... 

我想做到以下幾點:

is_Berlin is_Prague is_Mexico 
1   0   0 
0   1   0 
0   0   1 
0   1   0 
0   0   1 

我知道我可以分別創建列:

df['is_Berlin'] = df['Place'] 
df['is_Prague'] = df['Place'] 
df['is_Mexico'] = df['Place'] 

然後爲每列創建一個字典並應用一個map函數。

#Example just for is_Berlin column 
d = {'Berlin': 1,'Prague': 0,'Mexico': 0} 
df['is_Berlin'] = df['is_Berlin'].map(d) 

但我覺得這種方式很乏味,我相信有一個很好的pythonic方式是如何做到的。

回答

4

您可以使用str.get_dummies,如果需要添加新的列到原始DataFrame,使用concat

df1 = df.Place.str.get_dummies() 
print df1 
    Berlin Mexico Prague 
0  1  0  0 
1  0  0  1 
2  0  1  0 
3  0  0  1 
4  0  1  0 

df1.columns = ['is_' + col for col in df1.columns] 
print df1 
    is_Berlin is_Mexico is_Prague 
0   1   0   0 
1   0   0   1 
2   0   1   0 
3   0   0   1 
4   0   1   0 
df = pd.concat([df, df1], axis=1) 
print df 
    Place is_Berlin is_Mexico is_Prague 
0 Berlin   1   0   0 
1 Prague   0   0   1 
2 Mexico   0   1   0 
3 Prague   0   0   1 
4 Mexico   0   1   0 

#if there is more columns, you can drop Place column 
df = df.drop('Place', axis=1) 
print df 
    is_Berlin is_Mexico is_Prague 
0   1   0   0 
1   0   0   1 
2   0   1   0 
3   0   0   1 
4   0   1   0 
+0

爲什麼回答時,有一個重複的? –

+0

重複?你能給鏈接嗎?但有可能,我第一次回答,從來沒有找到重複:(。 – jezrael

+0

太棒了!有沒有辦法如何將這些添加到現有的數據框?Column Place實際上是我的數據框的一部分,我想用這3個新列替換它。 – HonzaB