2016-10-11 111 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 
相关问题