如果您只想配对:
from operator import itemgetter as itfrom itertools import repeatn = 3 # sort_values = order pandas < 0.17new_d = (zip(repeat(row["index"]), map(it(0),(row[1:].sort_values(ascending=0)[:n].iteritems()))) for _, row in df.iterrows())for row in new_d: print(list(row))
输出:
[('B', 'option3'), ('B', 'option4'), ('B', 'option1')][('C', 'option2'), ('C', 'option5'), ('C', 'option1')][('D', 'option5'), ('D', 'option1'), ('D', 'option2')][('E', 'option1'), ('E', 'option2'), ('E', 'option3')][('F', 'option3'), ('F', 'option1'), ('F', 'option2')]这也维持秩序。
如果要列表列表:
from operator import itemgetter as itfrom itertools import repeatn = 3new_d = [list(zip(repeat(row["index"]), map(it(0),(row[1:].sort_values(ascending=0)[:n].iteritems())))) for _, row in df.iterrows()]
输出:
[[('A', 'option3'), ('A', 'option2'), ('A', 'option4')],[('B', 'option3'), ('B', 'option4'), ('B', 'option1')], [('C', 'option2'), ('C', 'option5'), ('C', 'option1')], [('D', 'option5'), ('D', 'option1'), ('D', 'option2')], [('E', 'option1'), ('E', 'option2'), ('E', 'option3')],[('F', 'option3'), ('F', 'option1'), ('F', 'option2')]]或使用python排序:
new_d = [list(zip(repeat(row["index"]), map(it(0), sorted(row[1:].iteritems(), key=it(1) ,reverse=1)[:n]))) for _, row in df.iterrows()]
实际上这是最快的,如果您真的想要字符串,则可以随意格式化输出格式。



