我正在解决一个多标签分类问题。数据集的格式为
| question | tags |
| ----- | ------- |
| How to print an array? | ['tag1' , 'tag2' , 'tag3'] |
| MathError: Cannot divide 0/0 | ['tag1' , 'tag6'] |
| Vertically align text to top within a UILabel | ['tag9', 'tag3'] |
我只需要像前1000个标签,并删除所有不包含标签的行。并且,如果它不属于前1000个标签,也从标签列中删除标签。
首先使用DataFrame.explode
将列表转换为列,然后使用Series.value_counts
获得顶部标签,并在boolean indexing
中使用Series.isin
过滤:
df1 = df.explode('tags')
top = df1['tags'].value_counts().index[:1000]
df2 = df1[df1['tags'].isin(top)].groupby('question')['tag'].agg(list).reset_index()