我在 Pandas 数据框中有 Place 列,如下所示:
**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)
但我觉得这有点乏味,我相信有很好的 pythonic 方式来处理它。
最佳答案
您可以使用 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
关于python - Pandas - 从分类列创建 bool 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36544089/