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

Pandas-在Applymap期间获取每个元素的行和列名称

南门建章
2023-03-14

我试图比较一个字符串列表的相似性,并在一个数据框中得到结果以供检查;所以我使用一个列表作为索引,另一个作为列列表。然后我想计算它们的“Levenshtein相似度”(一个比较两个单词之间相似度的函数)。

我试图在每个单元格上使用applymap,并将单元格索引与单元格列进行比较。我怎么能这么做?还是更简单的选择?

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)

共有2个答案

徐峰
2023-03-14

您可以通过“嵌套apply”实现,如下所示:

things = ['car', 'bike', 'sidewalk', 'eatery']
action = ['walking', 'caring', 'biking', 'eating']
matrix = pd.DataFrame(index=things, columns=action)
matrix.apply(lambda x: pd.DataFrame(x).apply(lambda y: LD(x.name, y.name), axis=1))

输出:

          walking  caring  biking  eating
car             6       3       6       5
bike            6       5       3       5
sidewalk        7       8       7       8
eatery          6       5       6       3

呼叫pd。数据帧(x)之所以出现这种情况,是因为x是一个系列对象和系列。应用类似于applymap,它不携带索引信息。

燕俊明
2023-03-14

我认为可以在数据帧上使用apply,并使用访问列的值。姓名

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
 类似资料:
  • 到目前为止,我求助于使用以下(以下),但我发现它笨拙和缓慢

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

  • 问题内容: 假设 如何获得由每n行之和组成的新系列? 当n = 5时,预期结果如下所示; 如果使用loc或iloc并通过python循环,当然可以完成,但是我相信可以简单地以Pandas方式完成。 另外,这是一个非常简化的示例,我不希望对序列进行解释:)。我正在尝试的实际数据系列具有时间索引和每秒发生的事件数作为值。 问题答案: 将索引分为5组,并相应地分组。 + 如果大小是N的倍数(或5),则可

  • 我想找到获得单元格中许多元素的列和行索引的最佳解决方案。 比如我有GridPane(15x15)。每个单元格都有按钮组件。当mouseClicked事件被指示时,我想获取行和列的索引。我知道如何手动操作: 但我的问题是:15x15网格窗格。声明每个按钮并为每个组件复制相同的代码是无效的。有人知道怎么做吗? //============================================

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

  • 我目前正在做一个熊猫的数据框架。我正在重新格式化数据,以便在运行分析时更容易理解。列中的默认数据是一个字符串,类似于< code> something | something。例如< code >事故|可修复损坏。 我想在dataframe中创建两个新列,将字符串拆分为两个不同的字符串,并将拆分字符串的不同部分分配给不同的列。 这是预期的输出: 这是我目前拥有的代码: 它当前正在获取第一条记录,并