python - 根据另一个列表中的值对列表进行排序并从排序中排除列表中的元素?

标签 python pandas list dataframe sorting

为了绘制瀑布图,我创建了三个列表作为输入:值、条形文本、轴文本。 我的目标是对第一个和最后一个元素之间的每个数字进行升序排序,即排除列表中的第一个和最后一个元素进行排序。

我有三个包含以下元素的列表:

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/

相关文章:

R如何在列表中找到向量子集的交集

python - 如何返回关于成功的 bool 值并仍然在 python 中包含 http 状态代码?

python - 没有聚合函数的分组

Python Elasticsearch : BulkIndexError: 'not_x_content_exception' while trying to use helpers. 批量

python - 修改函数以返回具有指定值的数据帧

python - 如何创建前 n 个项目的 2 级 groupby

Python/ Pandas /日期时间 : transform entire lists in a column to datetime

python - python中两组列表括号放在一起是什么意思?

Python 字典未在不同文件之间更新

python - 在pyspark中进行分组时,对另一列上满足额外条件的元素进行计数