python - 与 Dataframe 列进行比较并根据函数匹配相似行的最有效方法是什么?
问题描述
假设我们有两个 Dataframe,每个 Dataframe 都包含一列有点相似的基于字符串的值。基于比较函数(如textdistance 的Jaro-Winkler 实现),将行与相似列匹配的最有效和/或最有效的方法是什么?
示例数据框:
first_df = pd.DataFrame( ['Cars and cats', 'Spaceship', 'Captain Marvel', 'Dune','Bucks in 6'], columns=['Title'])
second_df = pd.DataFrame( ['Captain Harlock', 'Cats and dogs', 'Buccuneers', 'Dune buggy','Milwaukee Bucks'], columns=['Title'])
我在想的是:
- 根据每个 DataFrame 感兴趣的列创建笛卡尔积
- 应用比较函数并将结果存储在新列中。我们称它为similarity_score
- 按从最佳值到最差值对新 DataFrame 进行排序(取决于算法)
- 删除我们最感兴趣的列的重复项
执行:
comparison_df = first_df.merge(second_df, how='cross')
comparison_df['similarity_score'] = comparison_df.apply(lambda row: textdistance.jaro_winkler.normalized_similarity(row['First DataFrame Titles'], row['Second DataFrame Titles']), axis=1)
display(comparison_df)
comparison_df = comparison_df.sort_values('similarity_score', ascending=False).drop_duplicates(subset=['First DataFrame Titles'], keep='first')
欢迎任何建议。先感谢您。
解决方案
推荐阅读
- wordpress - 按子项计数排序 wordpress 分类父项
- javascript - $http 结果没有从缓存中检索?
- c# - Keydown事件如何用热键监听
- jenkins - 如何在 jenkins 中运行 Testcafe Saucelabs
- javascript - 需要为字符串中的数字总和提供资金,不包括带有 for 循环的字符串
- php - 从 Laravel/Lumen 将 AWS SQS 消息释放回队列
- javascript - JavaScript,如何以某种方式加密“纺车”的输出值
- android - Searchview 与 Recyclerview 的重叠问题
- c# - 为什么即使我传递了值和正确的参数,参数也会丢失?
- java - exoplayer 不玩添加并崩溃了