pandas -在Applymap期间检索每个元素的行和列名称 [英] Pandas - retrieve row and column name for each element during applymap
问题描述
我正在尝试比较2个字符串的相似性列表,并将它们显示在pandas数据框中以进行检查;所以我用一个列表作为索引,另一个用作列列表.然后,我想在它们上计算"Levenshtein相似度"(一个比较两个单词之间相似度的函数).
I am trying to compare 2 lists of strings for similarity and present them in a pandas dataframe for inspection; so i use 1 list as index and the other as column list. I then want to compute the "Levenshtein similarity" on them (a function that compar the similarity between the 2 words).
我试图通过使用apply map来实现这一点,它将在每个单元格中进行比较,并将单元格索引与cell列进行比较.但是我该怎么办呢?也许会有一些更简单的方法?
I am trying to achieve that by using apply map, that will go in every cell, and compar the cell index to the cell column. But how could I do that? Or maybe there would be some simpler ways?
things = ['car', 'bike', 'sidewalk', 'eatery']
action = ['walking', 'caring', 'biking', 'eating']
matrix = pd.DataFrame(index = things, columns = action)
def lev(x):
x = Levenshtein.distance(x.index, x.column)
matrix.applymap(lev)
到目前为止,我使用了以下内容(以下),但发现它笨拙且缓慢
so far I resorted to use the following (below) but I find it clumsy and slow
matrix = pd.DataFrame(data = [action for i in things], index = things, columns = action)
for i, values in matrix.iterrows():
for j, value in enumerate(values):
matrix.ix[i,j] = Levenshtein.distance(i, value)
推荐答案
如果需要一些自动操作,请使用广播:
If need some arithemtic operation use broadcasting:
a = pd.DataFrame(matrix.index.values + matrix.columns.values[:,None],
index=matrix.index,
columns=matrix.columns)
print (a)
walking caring biking eating
car carwalking bikewalking sidewalkwalking eaterywalking
bike carcaring bikecaring sidewalkcaring eaterycaring
sidewalk carbiking bikebiking sidewalkbiking eaterybiking
eatery careating bikeeating sidewalkeating eateryeating
或者:
a = pd.DataFrame(matrix.index.values + matrix.columns.values[:, np.newaxis],
index=matrix.index,
columns=matrix.columns)
print (a)
walking caring biking eating
car carwalking bikewalking sidewalkwalking eaterywalking
bike carcaring bikecaring sidewalkcaring eaterycaring
sidewalk carbiking bikebiking sidewalkbiking eaterybiking
eatery careating bikeeating sidewalkeating eateryeating
这篇关于 pandas -在Applymap期间检索每个元素的行和列名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!