2016-10-11 109 views
1

CountTokenizing場,變成我使用數據,看起來像這樣列

ID  PATH   GROUP 
11937 MM-YT-UJ-OO GT 
11938 YT-RY-LM  TQ 
11939 XX-XX-OT  DX 

我想來標記PATH列進正克,然後一熱編碼到那些自己的列,所以我想最終是這樣的:

ID  GROUP MM YT UJ OO RY LM XX OT MM-YT YT-UH ... 
11937 GT  1 1 1 1 0 0 0 0 1  1 

我還可以使用計算禮物,而非一熱,所以11939將在XX列,而不是1有2,但我可以與任一工作。

我可以使用scikitlearn CountVectorizer很容易地標記列,但隨後我必須綁定IDGROUP字段。有沒有一個標準的方法來做到這一點或任何人發現的最佳做法?

回答

1

A液:

df.set_index(['ID', 'GROUP'], inplace=True) 
pd.get_dummies(df.PATH.str.split('-', expand=True).stack())\ 
       .groupby(level=[0,1]).sum().reset_index() 

隔離ID和組列作爲索引。然後轉換成字符串小區項目

df.PATH.str.split('-', expand=True) 
Out[37]: 
       0 1 2  3 
ID GROUP     
11937 GT  MM YT UJ OO 
11938 TQ  YT RY LM None 
11939 DX  XX XX OT None 

讓他們進入數據中的一列

df.PATH.str.split('-', expand=True).stack() 
Out[38]: 
ID  GROUP 
11937 GT  0 MM 
       1 YT 
       2 UJ 
       3 OO 
11938 TQ  0 YT 
       1 RY 
       2 LM 
11939 DX  0 XX 
       1 XX 
       2 OT 

get_dummies把計數器作爲列由每數據傳播翻過行

pd.get_dummies(df.PATH.str.split('-', expand=True).stack()) 
Out[39]: 
       LM MM OO OT RY UJ XX YT 
ID GROUP         
11937 GT 0 0 1 0 0 0 0 0 0 
      1 0 0 0 0 0 0 0 1 
      2 0 0 0 0 0 1 0 0 
      3 0 0 1 0 0 0 0 0 
11938 TQ 0 0 0 0 0 0 0 0 1 
      1 0 0 0 0 1 0 0 0 
      2 1 0 0 0 0 0 0 0 
11939 DX 0 0 0 0 0 0 0 1 0 
      1 0 0 0 0 0 0 1 0 
      2 0 0 0 1 0 0 0 0 

集團ID,GROUP(索引中的級別0和1)將行彙總在一起,並且每個元組有一行。最後重置索引以將ID和GROUP列作爲常規列返回。

0

也許你可以嘗試這樣的事情。

# Test data 
df = DataFrame({'GROUP': ['GT', 'TQ', 'DX'], 
'ID': [11937, 11938, 11939], 
'PATH': ['MM-YT-UJ-OO', 'YT-RY-LM', 'XX-XX-OT']}) 

# Expanding data and creating on column by token 
tmp = pd.concat([df.loc[:,['GROUP', 'ID']], 
       df['PATH'].str.split('-', expand=True)], axis=1) 
# Converting wide to long format 
tmp = pd.melt(tmp, id_vars=['ID', 'GROUP']) 
# Now grouping and counting 
tmp.groupby(['ID', 'GROUP', 'value']).count().unstack().fillna(0) 

#    variable         
# value    LM MM OO OT RY UJ XX YT 
# ID GROUP            
# 11937 GT   0.0 1.0 1.0 0.0 0.0 1.0 0.0 1.0 
# 11938 TQ   1.0 0.0 0.0 0.0 1.0 0.0 0.0 1.0 
# 11939 DX   0.0 0.0 0.0 1.0 0.0 0.0 2.0 0.0 
相關問題