我有兴趣计算给定pandas DataFrame的所有列的编辑距离。我们假设我们有一个3 * 5的DataFrame - 我希望用距离得分输出这样的东西 - (列*列矩阵)
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 NaN NaN 1888 NaN KAIKUNANE
1 NaN NaN 1731 NaN MAKUAHINE
2 NaN NaN 1862 NaN MAKUAHINE
3 NaN NaN 1825 NaN KAIKUNANE
4 NaN NaN 1816 NaN KAIKUNANE
同样,我得到了一个(191795,58)数据集。我的目标是找到数据集的每列之间的编辑距离,以便了解它们之间的模式(如果有的话)。
例如,我希望使用STRUCTURE_ID列的所有值来检查INSPECTION_ID 100。在这种情况下,我理解需要优化的迭代器。请帮助我提出一些方向来解决这个问题。提前致谢。
答案 0 :(得分:0)
非常天真的解决方案(假设您已经有编辑距离功能)但可能只适用于小型数据集
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或其他免费提供的其中一个