使用针对未知列数的自定义顺序对pandas中的列进行排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用针对未知列数的自定义顺序对pandas中的列进行排序相关的知识,希望对你有一定的参考价值。

我的pandas DataFrame中有以下列

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

我怎样才能达到这个结果?我已经尝试了一切等但没有任何作用。试图在谷歌上搜索但没有找到答案。问题是我们不知道最后会有多少列。

答案

使用模板order

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']

更新:解释

order用作您想要描述单个项目的特定字段顺序的模板。

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

我用这种不雅的方法找到了物品的数量:

int(max([x.split("_")[1] for x in l])) + 1

然后我使用列表推导来循环项目编号和字段(按照与我的order列表相同的顺序)在代码中创建“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
]

以上是关于使用针对未知列数的自定义顺序对pandas中的列进行排序的主要内容,如果未能解决你的问题,请参考以下文章

当列数事先未知时如何访问 Pandas 数据框列

Python Pandas - 连接两个具有不同行数和列数的数据框

pandas - 追加具有不同列数的新行

如何检索 Pandas 数据框中的列数?

将具有未知列数的数据导入R?

合并具有不同列数的表