2016-02-29 118 views
2

我有一个看起来像数据框:从另一列的值的列表中创建多个列

Groupe  Id MotherName FatherName Field 
Advanced 56 Laure   James  English-107,Economics, Management, History, Philosophy 
Middle  11 Ann   Nicolas  Web-development, Java-2 
Advanced 6  Helen   Franc  Literature, English-2 
Beginner 43 Laure   James  Mathematics, History, Philosophy, Literature 
Middle  14 Naomi   Franc  Java-2, Management, English-107 

其与上述数据进一步工作,我需要拆分Field列,并与多个列取代它的是看起来像:

Id English-107 Economics Management History Web-development Java-2 Literature English-2 Mathematics Philosophy 
56  1   1   1   1   0   0  0    0   0   1 
11  0   0   0   0   1   1  0    0   0   0 

所以这些列可以追加到初始数据框。我不知道该怎么做了,因为就像

pd.DataFrame(df.Field.str.split(',',1).tolist()) 
基本分裂

不能解决我的probleme,因为我需要不只是基于在列表中的位置的列,但基于每一个独特的价值在列表中。你有什么想法我可以接近它吗?

+0

你DF后'。 cata.str.split(',',expand = True)' – EdChum

回答

2

您可以使用concatstr.get_dummies

print pd.concat([df['Id'], df['Field'].str.get_dummies(sep=",")], axis=1) 
    Id Economics English-107 English-2 History Java-2 Literature \ 
0 56   1   1   0  1  0   0 
1 11   0   0   0  0  1   0 
2 6   0   0   1  0  0   1 
3 43   0   0   0  1  0   1 
4 14   0   1   0  0  1   0 

    Management Mathematics Philosophy Web-development 
0   1   0   1    0 
1   0   0   0    1 
2   0   0   0    0 
3   0   1   1    0 
4   1   0   0    0 

如果你需要计算的值,可以使用pivot_table(我添加一个字符串Economics用于测试):

df1 = df['Field'].str.split(',',expand=True).stack() 
              .groupby(level=0) 
              .value_counts() 
              .reset_index() 
df1.columns=['a','b','c'] 
print df1.pivot_table(index='a',columns='b',values='c').fillna(0) 
b Economics English-107 English-2 History Java-2 Literature Management \ 
a                    
0   2   1   0  1  0   0   1 
1   0   0   0  0  1   0   0 
2   0   0   1  0  0   1   0 
3   0   0   0  1  0   1   0 
4   0   1   0  0  1   0   1 

b Mathematics Philosophy Web-development 
a            
0   0   1    0 
1   0   0    1 
2   0   0    0 
3   1   1    0 
4   0   0    0 
+0

很酷的解决方案,不知道'get_dummies'有一个分隔符参数,我只用于单值列 – maxymoo

相关问题