从单个字符串列创建新的二进制列在pandas中
我之前见过这个,但就是想不起来这个函数是什么。
假设我有一列叫“速度”,每一行都有以下这些值:
'Slow', 'Normal', 'Fast'
我该如何创建一个新的数据框,这个数据框里包含所有的行,但不包括“速度”这一列,而是变成3列:“慢”、“正常”和“快”,并且每一行在对应的列里标记一个1,表示原来的“速度”列的值。如果我有:
print df['Speed'].ix[0]
> 'Normal'
我不希望得到这样的结果:
print df['Normal'].ix[0]
>1
print df['Slow'].ix[0]
>0
3 个回答
2
这还有另一种方法:
df = pd.DataFrame(['Slow','Fast','Normal','Normal'],columns=['Speed'])
df['Normal'] = np.where(df['Speed'] == 'Normal', 1 ,0)
df['Fast'] = np.where(df['Speed'] == 'Fast', 1 ,0)
df['Slow'] = np.where(df['Speed'] == 'Slow', 1 ,0)
df
Speed Normal Fast Slow
0 Slow 0 0 1
1 Fast 0 1 0
2 Normal 1 0 0
3 Normal 1 0 1
6
这里有一个解决方案:
df['Normal'] = df.Speed.apply(lambda x: 1 if x == "Normal" else 0)
df['Slow'] = df.Speed.apply(lambda x: 1 if x == "Slow" else 0)
df['Fast'] = df.Speed.apply(lambda x: 1 if x == "Fast" else 0)
14
你可以很简单地使用 pd.get_dummies
来实现这个功能,具体的说明可以查看这个链接:docs。
In [37]: df = pd.DataFrame(['Slow', 'Normal', 'Fast', 'Slow'], columns=['Speed'])
In [38]: df
Out[38]:
Speed
0 Slow
1 Normal
2 Fast
3 Slow
In [39]: pd.get_dummies(df['Speed'])
Out[39]:
Fast Normal Slow
0 0 0 1
1 0 1 0
2 1 0 0
3 0 0 1