Levenshtein 编辑行和列之间的距离

Levenshtein edit-distance between rows and columns

我创建了以下空 DataFrame:

columns = ['Band','Tree','Foot']
rows = ['Hand', 'Foot', 'Shoulder']

df = pd.DataFrame(index=rows, columns=columns)

我想计算列与行之间的距离,目前正在使用以下代码:

import pandas as pd
import nltk

def distance(x):
    i = x.index
    j = x.name
    return nltk.edit_distance(i,j)

df = df.apply(distance)

但是这个 returns:

- -
Band 4
Tree 4
Foot 4

我想return每个单元格对应的列和行之间的距离。

Band Tree Foot
Hand 1 4 4
Foot 4 4 0
Shoulder 7 7 7

我错过了什么?

edit_distance 需要 2 个字符串,因此您必须遍历索引。一种选择是应用在 df:

上执行此操作的 lambda
df.apply(lambda col: [nltk.edit_distance(col.name, i) for i in col.index])

但是,我认为首先创建一个包含值的字典更简单,而不是填充 DataFrame;然后构建一个 DataFrame 如下:

df = pd.DataFrame({j: {i: nltk.edit_distance(i,j) for i in rows} for j in columns})

输出:

          Band  Tree  Foot
Hand         1     4     4
Foot         4     4     0
Shoulder     7     7     7