我有一个带有“描述”列的DataFrame,我想进行一个热编码,其中包括描述中单词的单词计数
description
0 test words that describe things
1 more and more words here
2 things test
所需的输出
test words that describe things more here and
0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0
1 0.0 1.0 0.0 0.0 0.0 2.0 1.0 1.0
2 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0
我目前拥有的解决方案是:
one_hot = df.apply(lambda x: pd.Series(x.description).str.split(expand=True).stack().value_counts(), axis=1)
在大型数据集(13万行)上,这变得非常慢(每行2.6毫秒),我想知道是否有更好的解决方案。 我还想删除仅出现在一个条目中的单词。
test words things
0 1.0 1.0 1.0
1 0.0 1.0 0.0
2 1.0 0.0 1.0
答案 0 :(得分:1)
IIUC,为了计数,您可以在groupby+sum
之后在axis=1
上进行get_dummies
final = (pd.get_dummies(df['description'].str.split(expand=True))
.groupby(lambda x: x.split('_')[-1],axis=1).sum())
或与apply(slower):
df['description'].str.split(expand=True).apply(pd.value_counts,axis=1).fillna(0)
and describe here more test that things words
0 0 1 0 0 1 1 1 1
1 1 0 1 2 0 0 0 1
2 0 0 0 0 1 0 1 0