如何处理 DataFrame 中的配对数据集?

df = pd.DataFrame({'source': [1000,1000,1001,1002,1002],'acceptability': [1,1,0],'sentence': ['I do not know','I does not know','you are stupid','you is stupid','she is bad for python','she are bad for python']})

我想做的是比较两个共享相同来源的句子。拆分或合并(无论如何..)后,我想在两个句子之间使用 Jaccard Similarity。

我不知道如何用循环来完成。

也许原型是这样的。

来源:1000,可接受性:1,句子:

来源:1000,可接受性:0,句子:

....

来源:1001,可接受性:1,句子:

来源:1001,可接受性:0,句子:

...

在用loop station拆分DataFrame之后,我希望基于Jaccard Similarity比较那些对。 如果对的相似度得分太低,我想从 DataFrame 中删除该对。

我真的需要你们的帮助!!

感谢帮助我!!

xty2004 回答:如何处理 DataFrame 中的配对数据集?

我想在两个句子之间使用 Jaccard 相似度。

让我们先为集合列表的 Jaccard similarity coefficient 定义一个函数:

def JaccSim(sets): return len(set.intersection(*sets))/len(set.union(*sets))

比较两个来源相同的句子

我们可以使用 DataFrame.groupby分割数据帧,而无需显式循环:

js = df.groupby('source').apply(lambda d: JaccSim(d['sentence'].str.split().apply(set)))

这将每个源组的句子转换为一组单词的列表并计算相似系数,给出:

source
1000    0.600000
1001    0.500000
1002    0.666667
dtype: float64

如果对的相似度得分太低,我想从 DataFrame 中删除该对。

现在提取具有足够高相似度(例如至少 0.6)的行就像

df = df.set_index('source')[.6<=js]

然而,这会打印一个 UserWarning: Boolean Series key will be reindexed to match DataFrame index. 我们可以通过使用

来避免这种情况
df = df.set_index('source')[.6<=js[df['source']]]
本文链接:https://www.f2er.com/6282.html

大家都在问