【问题标题】:How can I deal with paired dataset in DataFrame?如何处理 DataFrame 中的配对数据集?
【发布时间】:2021-07-31 07:08:43
【问题描述】:
df = pd.DataFrame({'source': [1000, 1000, 1001, 1001, 1002,1002], 'acceptability': [1,0,1,0,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,句子:

...

在将 DataFrame 与 loop station 拆分后,我希望根据 Jaccard Similarity 比较这些对。 如果这对的相似度分数太低,我想从 DataFrame 中删除该对。

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

谢谢你帮助我!!

【问题讨论】:

    标签: python dataframe nlp pandas


    【解决方案1】:

    我想在两个句子之间使用 Jaccard Similarity。

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

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

    比较两个相同来源的句子

    我们可以使用DataFrame.groupbysource 拆分DataFrame,而无需显式循环:

    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']]]
    

    【讨论】:

      猜你喜欢
      • 2020-03-14
      • 2021-09-21
      • 1970-01-01
      • 2014-10-06
      • 2019-05-25
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      相关资源
      最近更新 更多