python:输入虚拟变量

时间:2017-08-09 18:19:21

标签: python pandas variables dataframe

我想为TypePhase列添加虚拟变量。

wm_id                                   TypePhase
   2                   ['N', 'A', 'B', 'C', 'D']
   2                   ['N', 'A', 'B', 'C', 'D']
   3                   ['N', 'W', 'A', 'B', 'C', 'D']
   2                   ['N', 'A', 'B', 'C', 'D']
   3                   ['N', 'P', 'A', 'B', 'C', 'D']
   2                   ['N', 'A', 'B', 'C', 'D']

我试过了df.TypePhase = df.TypePhase.apply(lambda s : '_'.join(s)),但我没有得到预期的结果。我知道我需要申请

pd.get_dummies(df_new['TypePhase']).rename(columns=lambda x: 'AAAAAAAAA_' + str(x))

但我不能做对。 请问,有什么建议吗? 提前谢谢了。 卡罗

1 个答案:

答案 0 :(得分:1)

我认为所有值都是TypePhase列中的字符串,因此可以使用str.get_dummies加倍str.strip

最后join原件。

pop函数提取原始列,所以不必删除它。

print (type(df.loc[0, 'TypePhase']))
<class 'str'>

df1 = df.pop('TypePhase').str.strip('[]').str.get_dummies(', ')
#remove ' from new column names
df1.columns = df1.columns.str.strip("'")

df = df.join(df1)
print (df)
   wm_id  A  B  C  D  N  P  W
0      2  1  1  1  1  1  0  0
1      2  1  1  1  1  1  0  0
2      3  1  1  1  1  1  0  1
3      2  1  1  1  1  1  0  0
4      3  1  1  1  1  1  1  0
5      2  1  1  1  1  1  0  0