2016-04-11 3 views
3

У меня есть столбец место в панды dataframe, который выглядит следующим образом:Панды - создать логические столбцы из категорического столбца

**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'] 

Затем создайте словарь для каждого столбца и примените функцию карты.

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

Но мне это как-то утомительно, и я считаю, что это хороший вещий способ, как сделать его.

ответ

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

Duplicate? Можете ли вы дать ссылку? Но это возможно, я сначала отвечаю, никогда не нахожу дубликатов :( – jezrael

+0

Отлично! Есть ли способ добавить их в существующий фреймворк? Столбец Place на самом деле является частью моей фреймворка данных, и я хочу заменить его этими тремя новыми столбцами. – HonzaB

Смежные вопросы