python - 如何处理 DataFrame 中的配对数据集?
问题描述
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 与循环站拆分后,我希望根据 Jaccard Similarity 比较这些对。如果这对的相似度分数太低,我想从 DataFrame 中删除该对。
我真的需要你们帮助!!
谢谢你帮助我!
解决方案
我想在两个句子之间使用 Jaccard Similarity。
我们先定义一个集合列表的Jaccard 相似系数的函数:
def JaccSim(sets): return len(set.intersection(*sets))/len(set.union(*sets))
比较两个共享相同来源的句子
我们可以使用DataFrame.groupby按源拆分 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]
但是,这会打印出 aUserWarning: Boolean Series key will be reindexed to match DataFrame index.
我们可以通过使用来避免这种情况
df = df.set_index('source')[.6<=js[df['source']]]
推荐阅读
- angular - 在应用内导航时将数据传递到子路由,或在直接导航时使用解析器
- sql - 如何在线将 .sql / .xml 转换为 .erwin?
- c# - Azure Pipeline VSTest@2 Task 认为以“Tester”结尾的项目是测试项目
- python - popen 使用后台进程将标准输出写入文件和 shell
- java - 在 Java 中查找和编辑 ArrayList
- tensorflow - 多输出自定义keras ResNet50模型;ValueError:图表已断开连接
- php - api 端点未在 Sanctum 上进行 CSRF 令牌验证 - CSRF 令牌不匹配
- javascript - 在关闭 chrome 中的弹出窗口之前需要运行一些代码
- mongodb - 我正在尝试将 Docker 上的 BI 连接器实例连接到 Mongo Atlas 中的数据库
- python - IndexError:索引 -1 超出轴 0 的范围,大小为 0