2016-02-29 121 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

相關問題