pandas -在Applymap期间检索每个元素的行和列名称 [英] Pandas - retrieve row and column name for each element during applymap

查看:109
本文介绍了 pandas -在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆