我有一个数据帧,其中行索引和列标题应该确定每个单元格的内容。我正在使用以下df的更大版本:
df = pd.DataFrame(index = ['afghijklde', 'afghijklmde', 'ade', 'afghilmde', 'amde'],
columns = ['ae', 'azde', 'afgle', 'arlde', 'afghijklbcmde'])
具体来说,我想应用自定义函数edit_distance()
或等效函数(函数代码请参见here),它计算两个字符串之间的差值。这两个输入是行和列的名称。以下操作有效,但速度非常慢:
这将产生我想要的结果:
ae azde afgle arlde afghijklbcmde
afghijklde 8 7 5 6 3
afghijklmde 9 8 6 7 2
ade 1 1 3 2 10
afghilmde 7 6 4 5 4
amde 2 1 3 2 9
使用applymap()
是更好的方法吗?。我用applymap()
或apply
或df.iterrows()
尝试过的所有操作都返回了AttributeError: "'float' object has no attribute 'index'"
类型的错误。谢谢。在
你可以使用理解功能,在我的电脑上它的速度可以提高4.5倍
注:我使用此代码编辑_距离(您的链接中的第一个响应):
^{pr2}$事实证明还有更好的方法。上面onepan的字典理解答案是好的,但是以随机顺序返回df索引和列。使用嵌套的
.apply()
可以以相同的速度完成相同的事情,并且不会改变行/列的顺序。关键是不要先为df的行和列命名,然后再填充值。相反,可以用另一种方法来做,首先将未来的索引和列作为独立的pandas系列来处理。在相关问题 更多 >
编程相关推荐