【问题标题】:Edit Distance between all the columns of a pandas dataframe编辑熊猫数据框所有列之间的距离
【发布时间】:2018-10-14 16:01:17
【问题描述】:

我有兴趣计算给定 pandas DataFrame 的所有列的编辑距离。假设我们有一个 3*5 的 DataFrame - 我想用距离分数输出类似的东西 - (column*column matrix)

  col1  col2 col3 col4 col5

col1

col2

col3

col4

col5

我希望一列的每个元素都与其他列的每个元素匹配。因此,对于每个 col1*col2 单元格 = col1 和 col2 的嵌套循环的所有分数的总和。

我非常感谢您在这方面的任何帮助。提前致谢。


INSPECTION_ID STRUCTURE_ID RELOCATE_FID HECO_ID HECO_ID_TAG_NOT_FOUND \ 0 100 95308 NaN 18/29 0.0
1 101 95346 NaN Nov-29 0.0
2 102 50008606 NaN 25/29 0.0
3 103 95310 NaN Dec-29 0.0
4 104 95286 NaN 17/29 0.0

OSMOSE_POLE_ID ALTERNATE_ID STREET_NBR STREET_DIRECTIONAL STREET_NAME \ 0 南 南 1888 南凯库纳内
1 南 南 1731 南 MAKUAHINE
2 南 南 1862 南 MAKUAHINE
3 南 南 1825 南凯库纳内
4 南南 1816 南凯库南

同样,我得到了一个 (191795, 58) 数据集。我的目标是找到数据集每一列之间的编辑距离,以便了解它们之间的模式(如果有的话)。

例如,我希望检查 INSPECTION_ID 100 与列 STRUCTURE_ID 的所有值,依此类推。我理解在这种情况下需要优化迭代器。请帮助我提出一些方向来解决这个问题。提前致谢。

【问题讨论】:

  • 您能否提供一个带有值的小型手动示例,以便我们更好地了解您要完成的工作。

标签: python pandas dataframe edit-distance


【解决方案1】:

非常简单的解决方案(假设您已经有编辑距离功能)但可能只适用于小型数据集

df = # your dataset
def edit_distance(s1, s2):
    # some code
    # return edit distance of s1, s2


df_distances = []
for i, row in df.iterrows():
    row_distances = []
    for item in row:
        for item2 in row:
              row_distances.append(edit_distance(item, item2))
    df_distances.append(some_array)

我尚未测试此解决方案,因此可能存在错误,但一般原则应该有效。如果你没有编辑距离功能,你可以使用这个实现 https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#Python 或许多其他免费提供的之一

【讨论】:

  • 嗨,我对上面sn-p的理解是,这基本上会计算同一行(不同列)元素之间的编辑距离。但我也希望计算给定列的所有行的编辑距离。假设我们有 3*2 数据集,我想要 9 次计算编辑距离。希望你能帮助我解决这个问题。谢谢!
  • 我仍然不太清楚目标是什么。混乱源于不确切知道数据框的每个元素中的内容。如果您可以提供一个小型玩具数据集和所需的输出,这将有所帮助,我会在之后更改答案以解决该问题。
  • id1, id2, oid .... 0 100 95308 NaN 18/29 0.0 1 101 95346 NaN Nov-29 0.0 2 102 50008606 NaN 25/29 0.0 3 103 95310 NaN Dec-29 0.0 4 104 95286 NaN 17/29 0.0 你去。我有一个 (191795, 58) 文件。我需要找到文件每两列之间的编辑距离 - 了解列中是否存在任何模式。希望这会有所帮助。
猜你喜欢
  • 2017-08-11
  • 2023-03-07
  • 2022-11-03
  • 2019-09-30
  • 2021-06-22
  • 2018-06-06
  • 2020-06-06
  • 1970-01-01
  • 2014-01-08
相关资源
最近更新 更多