按主题python将电子邮件分组的有效方法

时间:2018-07-23 11:27:34

标签: python pandas email

我有一个长长的熊猫数据框(90,000个电子邮件),我想创建一个新的数据框,其中每个电子邮件都按主题分组。例如,如果我有3封电子邮件,主题为“ hello”,则我将以一列为主题,另一列包含与3封电子邮件相对应的3封电子邮件ID的列表。到目前为止,我有:

index = 0
for i in range(df.shape[0]):
    count = 0
    for x in range(bindf.shape[0]):
        if (df['Subject'][i] == bindf['Subject'][x]):
            bindf['emailID'][x].append(df['Message-ID'][i])
            count = 1
    if count == 0:
        bindf.iloc[index] = [df['Subject'][i],df['Message-ID'][i]]
        bindf['emailID'][index] = bindf['emailID'][index].split(' ', maxsplit = 0)
        index = index +1

这行得通,但是到我需要多个小时来运行它的速度实在令人难以置信。

注意:每封电子邮件都包含一个主题,并且电子邮件ID是原始数据框中的字符串,我希望在此处将其作为列表的一部分

1 个答案:

答案 0 :(得分:0)

如果要按完全相同的主题分组,可以:

df.groupby('subject')['ID'].apply(list)

但是,即使它们的语义没有差异,主题很可能也会有所不同。因此,如果您这样做,则可能需要先对主体应用一些转换(所有下部,删除空白,标点符号等)。

否则,您可以为主题(例如“包含X”)创建过滤器。

一种合理的方法是将一袋单词或word2vec应用于群集并进行分组。

希望有帮助