首页 > 解决方案 > 如何在 pandas Dataframe 中同时使用 groupby 和 CountVectorizer()?

问题描述

我有这个样本数据。这是一个 CSV 文件。我想使用 Bag-of-Word 方法(CounterVector())创建“问题”和“回复”列的特征向量,然后计算问题与其回复之间的余弦相似度。

到目前为止,我有这个 python 代码:

topFeaturesValueListColumns = ['cosinSimilarityIpostRpost', 'Class']
topFeaturesValueList = []

featureVectorsPD = pd.DataFrame()
df = pd.read_csv("test1.csv", usecols = ['ThreadID', 'Title', 'UserID_inipst', 'Questions', 'UserID', 'Replies', 'Class'])
df = pd.DataFrame(df)

df = df.apply(lambda x: x.astype(str).str.lower())

for column in df:
  df[column] = df[column].apply(lambda x: " ".join(x for x in x.split() if x not in stop))

cv = CountVectorizer()

features =cv.fit(df['Title']+' '+df['UserID_inipst']+' '+df['Questions']+' '+df['UserID']+' '+df['Replies'])

print(features.vocabulary_)

featureVectorsPD['Questions'] = cv.transform(df['Questions']).toarray().tolist()
featureVectorsPD['Replies'] = cv.transform(df['Replies']).toarray().tolist()
featureVectorsPD['Class'] = df['Class']

for i in range(len(featureVectorsPD)):
    q=np.array([featureVectorsPD['Questions'][i]])
    r=np.array([featureVectorsPD['Replies'][i]])
    label = featureVectorsPD['Class'][i]
    res = cosine_similarity(q, r, dense_output=True)
    res = float(np.asscalar(res[0]))
    row = [res, label]
    topFeaturesValueList.append(row)

topQDFValuesPD = pd.DataFrame(topFeaturesValueList, columns=topFeaturesValueListColumns)
print(topQDFValuesPD)

此代码中的问题是

features = cv.fit(df['Questions'] + ' ' + df['Replies'])

从整个“问题”和“回复”列创建单词字典(features.vocabulary_),但我的要求是分别为每个线程计算“词汇”,然后根据该单独的字典创建特征向量。换句话说,当值发生变化时,应该在“ThreadID”列中创建新的词汇表。

我认为这里使用了“groupby”功能,但是如何使用呢?希望问题很清楚。请帮我。我会非常感谢你。

标签: pythonpandaspandas-groupbytext-miningcountvectorizer

解决方案


推荐阅读