我有一个被抓取网站的熊猫数据框,其中包含网站标识符,网站的文字和标签。少数网站有两个标签,但是由于我想首先训练一个标签分类器,因此我想为每个网站创建一个只带有一个标签的数据版本(我知道这有点麻烦)。我的数据集中的标签不平衡(有些标签经常出现,有些很少出现)。如果我删除重复的网站ID,我想删除最常见的标签。这是带有多个标签的数据集的样子:

ID   Label   Text
1    a       some text
1    b       other text
1    a       data
2    a       words
2    c       more words
3    a       text
3    b       short text


我的想法是按标签的稀有性对每个网站标识符中的标签列进行排序。为此,我首先在标签列上执行value_counts(ascending = True),以获取按稀有度排序的所有标签的列表。

to_sort = [c, b, a]


然后,我想使用该列表按稀有度对每个网站ID进行排序。不过,我不确定该怎么做。结果应如下所示:

ID   Label   Text
1    b       other text
1    a       some text
1    a       data
2    c       more words
2    a       words
3    b       short text
3    a       text


然后,我将使用df.drop_duplicates(subset = 'ID', keep = 'first')保留最稀有的标签。如何进行分类?

最佳答案

使用有序的categorical,因此可能使用sort_values

to_sort = list('cba')

df['Label'] = pd.Categorical(df['Label'], ordered=True, categories=to_sort)

df = df.sort_values(['ID','Label'])
print (df)
   ID Label        Text
1   1     b  other text
0   1     a   some text
2   1     a        data
4   2     c  more words
3   2     a       words
6   3     b  short text
5   3     a        text

10-06 00:27