gpt4 book ai didi

Python 根据每个列表的第一个值以自定义顺序对列表进行排序

转载 作者:行者123 更新时间:2023-11-30 22:21:23 25 4
gpt4 key购买 nike

我想根据每个列表的第一个值以自定义顺序对列表进行排序。列表列表是我的数据透视表数据框的列 (cols = list(dfOverview.columns.values)),其中某些列本身就是一个列表。

最小工作示例(我希望以 b 开头的列移动到 c 之前):

cols = ['2016', '2017', '2018', 
('a', '2016'),
('a', '2017'),
('a', '2018'),
('c', '2016'),
('c', '2017'),
('c', '2018'),
('b', '2016'),
('b', '2017')]

sortOrder = {'2016': 0, '2017': 1, '2018': 2, 'a': 3, 'b': 4, 'c': 5}

cols.sort(key=lambda val: sortOrder[val[0]])

这会返回一个错误,尽管我尝试和谷歌搜索了很多,但我找不到一种方法来让它工作。期望的结果:

['2016', '2017', '2018', 
('a', '2016'),
('a', '2017'),
('a', '2018'),
('b', '2016'),
('b', '2017'),
('c', '2016'),
('c', '2017'),
('c', '2018')]
为了澄清我的问题的一些背景:我旋转了一个 pandas 数据框架,产生了一个新的数据框架,其中列可以由值列表组成(具有多个列作为参数的数据透视表)。这使得订购变得困难,因此出现了上述问题。

我的数据框是以下函数的结果:

dfPivot = df.pivot_table(index=['col1', 'col2'], 
columns=['year','category'],
values='price')

最佳答案

这种方式有点hacky,但你的方法也很hacky:D

>>> sorted(cols, key=lambda val: sortOrder[val[0]] if type(val) == tuple else sortOrder[val])

['2016', '2017', '2018', ('a', '2016'), ('a', '2017'), ('a', '2018'), ('b', '2016'), ('b', '2017'), ('c', '2016'), ('c', '2017'), ('c', '2018')]

关于Python 根据每个列表的第一个值以自定义顺序对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48662397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com