输入:-
empNo name
1234 [ AB, DE ]
5678 [ FG, IJ ]
命令:-
dataFrame = dataFrame.join(dataFrame.name.str.join('|').str.get_dummies().add_prefix('dummy_name_'))
上面的命令为“列名的每个字符”带来了一个虚拟字符
输出:-
empNo name dummy_name_A dummy_name_B dummy_name_D dummy_name_E dummy_name_F dummy_name_G dummy_name_I dummy_name_J
1234 [ AB, DE ] 1 1 1 1 0 0 0 0
5678 [ FG, IJ ] 0 0 0 0 1 1 1 1
预期:-
empNo name dummy_name_AB dummy_name_DE dummy_name_FG dummy_name_IJ
1234 [ AB, DE ] 1 1 0 0
5678 [ FG, IJ ] 0 0 1 1
答案 0 :(得分:1)
我认为列表不是列表,因此我们使用ast将字符串类型列转换回列表
import ast
df.name=df.name.apply(ast.literal_eval)
然后使用str get_dummies
s=df.name.apply(pd.Series).stack().str.get_dummies().sum(level=0).add_prefix('dummy_name_')
s
dummy_name_AB dummy_name_DE dummy_name_FG dummy_name_IJ
0 1 1 0 0
1 0 0 1 1
然后
pd.concat([df[['empNo']],s],axis=1)
数据输入
df.to_dict()
{'empNo': {0: 1234, 1: 5678}, 'name': {0: ['AB', 'DE'], 1: ['FG', 'IJ']}}