我正在开发一个python项目,我希望以某种模式订购pandas数据帧的标题。 我的结果列表如下所示:
Match1 attribute1 attribute2 attribute3 ... attributeN Score1 Match2 attributeM Score2 ... Match3 Score3
我想按照以下模式订购列表中的元素
Match1 Score1 Match2 Score2 Match3 Score3 attribute1 attribute2 attributeN ...
我知道列表中有多少对匹配/得分。但我不知道会有多少属性(我不需要订购它们)。这些都是由特定的数据结构决定的。有没有办法让我重新排列这样一个列表的顺序?
谢谢!
非常感谢您的帮助!
答案 0 :(得分:1)
使用sorted
,您可以按如下方式指定密钥;第一个键排序属性列到结尾,第二个键将结果按字符串末尾的数字排序:
# cols = df.columns
cols = ['Match1', 'attribute1', 'attribute2', 'attribute3', 'attributeN', 'Score1', 'Match2', 'attributeM', 'Score2', 'Match3', 'Score3']
import re
sorted(cols, key=lambda x: (not bool(re.match('match|score', x, flags=re.I)), re.sub(r'.*(\d+)$', r'\1', x)))
#['Match1',
# 'Score1',
# 'Match2',
# 'Score2',
# 'Match3',
# 'Score3',
# 'attribute1',
# 'attribute2',
# 'attribute3',
# 'attributeM',
# 'attributeN']
答案 1 :(得分:1)
以下是一些以
开头的不完整代码index = 0
for i in range(num_matches_and_scores]:
match1 = ??? # First instance of whatever you are trying to find
list1.remove(match1)
list1.insert(index, match1)
index += 1
score1 = ???
list1.remove(score1)
list1.inset(index, score1)
index += 1