为了绘制瀑布图,我创建了三个列表作为输入:值、条形文本、轴文本。 我的目标是对第一个和最后一个元素之间的每个数字进行升序排序,即排除列表中的第一个和最后一个元素进行排序。
我有三个包含以下元素的列表:
A = [50000,8000,-3000,-4000,51000]
B = ['Start','Profit1','Cost2','Cost1','End']
C = ['50K','8k','-3k','-4k','51k']
使用建议的方法 here (按其他列表对列表中的值进行排序),我声明:
a_new = sorted(A)
b_new = [x for _, x in sorted(zip(A, B))]
c_new = [x for _, x in sorted(zip(A, C))]
print(a_new)
print(b_new)
print(c_new)
并作为输出接收:
[-4000, -3000, 8000, 50000, 51000]
['Cost1', 'Cost2', 'Profit1', 'Start', 'End']
['-4k', '-3k', '8k', '50K', '51k']
不过,我的目标是修复列表的第一个和最后一个元素,并仅对所有其他元素进行排序。期望:
[50000,-4000,-3000,8000,51000]
['Start','Cost1', 'Cost2', 'Profit1','End']
['50K','-4k', '-3k', '8k','51k']
我想我已经接近解决方案了,但是已经被困在这里很长一段时间了......
最佳答案
你可以在你想要的部分使用np.argsort
:
order = np.r_[0,np.argsort(A[1:-1]) + 1, len(A)-1]
a_new = np.array(A)[order]
b_new = np.array(B)[order]
c_new = np.array(C)[order]
输出:
[50000 -4000 -3000 8000 51000]
['Start' 'Cost1' 'Cost2' 'Profit1' 'End']
['50K' '-4k' '-3k' '8k' '51k']
关于python - 根据另一个列表中的值对列表进行排序并从排序中排除列表中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64428967/