2017-05-28 74 views
2

我有一个熊猫数据框,看起来像下面的例子:迭代接管选择单元格中的熊猫数据帧和更换值

 tags  tag1  tag2  tag3 
0  [a,b,c]  0   0   0 
1  [a,b]  0   0   0 
2  [b,d]  0   0   0 
... 
n  [a,b,d]  0   0   0 

我想encade的tags作为行1S的tag1, tag2, tag3如果它们存在在该行索引的tags数组中。

但是,我不能完全弄清楚正确迭代;我的想法到目前为止如下:

for i, row in dataset.iterrows(): 
    for tag in row[0]: 
     for column in range (1,4): 
      if dataset.iloc[:,column].index == tag: 
       dataset.set_value(i, column, 1) 

但是,从该方法返回数据集时,列仍然都是0值。

谢谢!

+0

试'数据集= dataset.set_value(I,列1)'? – PYA

回答

2

看来你需要:


df1 = df['tags'].astype(str).str.strip('[]').str.get_dummies(', ') 
print (df1) 
    'a' 'b' 'c' 'd' 
0 1 1 1 0 
1 1 1 0 0 
2 0 1 0 1 
3 1 1 0 1 

最后通过concat添加df1到原始DataFrame

df = pd.concat([df,df1], axis=1) 
print (df) 
     tags tag1 tag2 tag3 'a' 'b' 'c' 'd' 
0 [a, b, c]  0  0  0 1 1 1 0 
1  [a, b]  0  0  0 1 1 0 0 
2  [b, d]  0  0  0 0 1 0 1 
3 [a, b, d]  0  0  0 1 1 0 1 
+0

谢谢 - 像魅力一样工作,虽然它删除了我的数据集的所有其余部分。我将把结果的内容合并到原始数据集中。 – Kam

+0

美女!非常感谢。 – Kam