python - 如何在 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”功能,但是如何使用呢?希望问题很清楚。请帮我。我会非常感谢你。
解决方案
推荐阅读
- python - 在 Python 中将 ENTER 按键发送到没有 gui 的后台 exe
- ios - 大型对象数组中字符串搜索的相关排序结果的性能感知解决方案
- correlation - 相关分析
- python - Python Pygame 事件列表双重实体而且很长
- php - 将日期放在视图中以显示上次更新
- javascript - 将对象数组传递给数组
- javascript - gettin ReferenceError: function is not defined while using ajax call - 没有ajax调用也能正常工作
- java - 使用 if 语句在单个方法中将常量相加
- swift - 表头内的 Swift UITextField
- python - Python (v3.7.7) Multiprocessing.Process?对于 .issubset