我有一个长长的熊猫数据框(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是原始数据框中的字符串,我希望在此处将其作为列表的一部分
答案 0 :(得分:0)
如果要按完全相同的主题分组,可以:
df.groupby('subject')['ID'].apply(list)
但是,即使它们的语义没有差异,主题很可能也会有所不同。因此,如果您这样做,则可能需要先对主体应用一些转换(所有下部,删除空白,标点符号等)。
否则,您可以为主题(例如“包含X”)创建过滤器。
一种合理的方法是将一袋单词或word2vec应用于群集并进行分组。
希望有帮助