Вы можете использовать pandas.get_dummies
.
>>> males = {'fred', 'george'}
>>> fm = pd.get_dummies(['Male' if name.lower() in males else 'Female' for name in df['name']])
>>> result = pd.concat([df, fm], axis=1)
>>>
>>> result
name Female Male
0 Alice 1 0
1 Fred 0 1
2 George 0 1
Это можно сделать намного более элегантно, используя лучшую структуру данных, например dict
, для сопоставления имен с полами:
>>> sex = {'Fred': 'Male', 'George': 'Male', 'Alice': 'Female', 'Emily': 'Female'}
>>> result = pd.concat([df, pd.get_dummies(df['name'].map(sex))], axis=1)
>>> result
name Female Male
0 Alice 1 0
1 Fred 0 1
2 George 0 1
Если начать с
male = ['fred','george']
female = ['alice','emily']
, вы можете построить sex
следующим образом:
>>> sex = {name.capitalize():s for names, s in [(male, 'Male'), (female, 'Female')]
...: for name in names}
...:
>>> sex
{'Alice': 'Female', 'Emily': 'Female', 'Fred': 'Male', 'George': 'Male'}
Наконец, если порядок столбцовважно, вы можете переиндексировать результат.
>>> result = result.reindex(columns=['name', 'Male', 'Female'])
>>> result
name Male Female
0 Alice 0 1
1 Fred 1 0
2 George 1 0