当前位置: 首页 > 知识库问答 >
问题:

Pandas-在applymap中检索每个元素的行和列名称

唐增
2023-03-14
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)

到目前为止,我求助于使用以下(以下),但我发现它笨拙和缓慢

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) 

共有1个答案

阙俊友
2023-03-14

我认为可以使用apply,对于列值使用.name:

def lev(x):
    #replace your function
    return x.index + x.name
a = matrix.apply(lev)
print (a)
                  walking          caring          biking          eating
car            carwalking       carcaring       carbiking       careating
bike          bikewalking      bikecaring      bikebiking      bikeeating
sidewalk  sidewalkwalking  sidewalkcaring  sidewalkbiking  sidewalkeating
eatery      eaterywalking    eaterycaring    eaterybiking    eateryeating

编辑:

如果需要一些特定的操作使用广播:

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
 类似资料:
  • 我试图比较一个字符串列表的相似性,并在一个数据框中得到结果以供检查;所以我使用一个列表作为索引,另一个作为列列表。然后我想计算它们的“Levenshtein相似度”(一个比较两个单词之间相似度的函数)。 我试图在每个单元格上使用,并将单元格索引与单元格列进行比较。我怎么能这么做?还是更简单的选择? 到目前为止,我使用了下面的方法,但我发现它既笨拙又缓慢

  • 问题内容: 我有一个数据框,其中某些单元格包含多个值的列表。我不想扩展一个单元格中的多个值,而是想扩展数据框,以便列表中的每个项目都有自己的行(所有其他列中的值都相同)。所以,如果我有: 如何转换为长格式,例如: 索引并不重要,可以将现有的列设置为索引也可以,最后的顺序也不重要。 问题答案: 结果: PS 在这里你可能会发现一些通用的解决方案 更新:一些解释:IMO了解此代码的最简单方法是尝试逐步

  • 问题 你希望能够在特定的情况下检测出在数组中的每个元素。 解决方案 使用 Array.every (ECMAScript 5): evens = (x for x in [0..10] by 2) evens.every (x)-> x % 2 == 0 # => true Array.every 被加入到 Mozilla 的 Javascript 1.6 ,ECMAScript 5 标准。如果

  • 本文向大家介绍Python-在Pandas DataFrame中更改列名和行索引,包括了Python-在Pandas DataFrame中更改列名和行索引的使用技巧和注意事项,需要的朋友参考一下 Pandas是一个python库,提供了许多数据分析功能,而这些功能在python标准库中是不可用的。一种这样的功能是使用数据帧。它们是代表列和行的矩形网格。在创建数据框时,我们确定列的名称,并在随后的数

  • 问题内容: 我有一个带有包含列表对象的列的Pandas DataFrame 如何访问每个列表的第一个元素并将其保存到DataFrame的新列中?要获得这样的结果: 我知道这可以通过遍历每一行来完成,但是有什么“ pythonic”方法吗? 问题答案: 您可以使用和功能

  • 我有一个数据框,其中一些单元格包含多个值的列表。我不想在一个单元格中存储多个值,而是希望扩展dataframe,以便列表中的每个项都有自己的行(在所有其他列中都有相同的值)。因此,如果我有: 如何转换为长格式,例如: 索引并不重要,可以将现有列设置为索引,而最终的顺序并不重要。