Python 使用未知列数的自定义顺序对熊猫中的列进行排序

Python 使用未知列数的自定义顺序对熊猫中的列进行排序,python,pandas,Python,Pandas,我的数据框中有以下列 DB_0, ISBN_0, ISSN_0, Title_0, e-ISBN_0, e-ISSN_, DB_1, ISBN_1, ISSN_1, Title_1, e-ISBN_1, e-ISSN_1 .... DB_n, ISBN_n, ISSN_n, Title_n, e-ISBN_n, e-ISSN_n 我想将其更改为自定义订单,有些类似于: Title_0, DB_0, ISSN_0, e-ISSN_0, ISBN_0, e-ISBN_0, Title_1, DB_

我的数据框中有以下列

DB_0, ISBN_0, ISSN_0, Title_0, e-ISBN_0, e-ISSN_, DB_1, ISBN_1, ISSN_1, Title_1, e-ISBN_1, e-ISSN_1 .... DB_n, ISBN_n, ISSN_n, Title_n, e-ISBN_n, e-ISSN_n
我想将其更改为自定义订单,有些类似于:

Title_0, DB_0, ISSN_0, e-ISSN_0, ISBN_0, e-ISBN_0, Title_1, DB_1, ISSN_1, e-ISSN_1, ISBN_1, e-ISBN_1, ..... Title_n, DB_n, ISSN_n, e-ISSN_n, ISBN_n, e-ISBN_n

我怎样才能达到这个结果??我什么都试过了,但都没用。试图在谷歌上搜索,但没有找到答案。问题是,我们不知道最后会有多少列。

使用模板
顺序

l = ['DB_0', ' ISBN_0', ' ISSN_0', ' Title_0', ' e-ISBN_0', ' e-ISSN_', ' DB_1', ' ISBN_1', ' ISSN_1', ' Title_1', ' e-ISBN_1', ' e-ISSN_1', ' DB_2', ' ISBN_2', ' ISSN_2', ' Title_2', ' e-ISBN_2', ' e-ISSN_2']
order = ["Title", "DB", "ISSN", "e-ISSN", "ISBN", "e-ISBN"]
new_columns = [
    "{f}_{n}".format(f=f, n=n)
    for n in range(int(max([x.split("_")[1] for x in l])) + 1)
    for f in order
]
print(new_columns)

>>> ['Title_0', 'DB_0', 'ISSN_0', 'e-ISSN_0', 'ISBN_0', 'e-ISBN_0', 'Title_1', 'DB_1', 'ISSN_1', 'e-ISSN_1', 'ISBN_1', 'e-ISBN_1', 'Title_2', 'DB_2', 'ISSN_2', 'e-ISSN_2', 'ISBN_2', 'e-ISBN_2']
更新:说明

订单
用作您要描述单个项目的特定字段订单的模板

现在,您的列由数量未知的项组成

我发现使用此不合法方法的项目数:

int(max([x.split("_")[1] for x in l])) + 1
然后我使用列表理解来循环项目编号和字段(与我的
顺序
列表的顺序相同) 在代码中创建格式为“field_number”的字符串,
{f}{n}

new_columns = [
    "{f}_{n}".format(f=f, n=n)
    for n in range(int(max([x.split("_")[1] for x in l])) + 1)
    for f in order
]

提示:将排序后的
与自定义key@coldspeedI试过所有的方法,也许你能解释得更清楚一点。我不知道为什么我的问题得到了反对票,谢谢,@Lante Dellarovere它工作得很好。你能解释一下你做了什么吗?补充解释。很高兴能帮上忙。谢谢你