簡體   English   中英

根據列名重新排序 Pandas 列

[英]Reordering Pandas Columns based on Column name

我有名稱相似的列,但數字后綴代表每列的不同出現。 例如,我有列(company_1、job_title_1、location_1、company_2、job_title_2、location_2)。 我想將這些列按前綴(下划線之前)分組在一起,然后按后綴(下划線之后)順序排列。

我希望列如何:company_1、company_2、job_title_1、job_title_2、location_1、location_2。

這是我從這個問題中嘗試的:

df = df.reindex(sorted(df.columns), axis=1)

這導致訂單:company_1,company_10,company_11(跳過2-9)

這種排序稱為自然排序。 (鏈接副本中的完整詳細信息自然排序 Pandas DataFrame

通過natsort

import pandas as pd
from natsort import natsorted

df = pd.DataFrame(columns=[f'company_{i}' for i in [5, 2, 3, 4, 1, 10]])

print(df)

排序前:

Empty DataFrame
Columns: [company_5, company_2, company_3, company_4, company_1, company_10]
Index: []

分類:

df = df.reindex(natsorted(df.columns), axis=1)
Empty DataFrame
Columns: [company_1, company_2, company_3, company_4, company_5, company_10]
Index: []

使用 sorted 進行字典排序:

df = df.reindex(sorted(df.columns), axis=1)
Empty DataFrame
Columns: [company_1, company_10, company_2, company_3, company_4, company_5]
Index: []

為了完整起見,您還可以通過將函數傳遞給sorted將字符串拆分為name, index元組來獲得所需的結果。


def index_splitter(x):
    """Example input: 'job_title_1'
       Output: ('job_title', 1)
    """
    *name, index = x.split("_")
    return '_'.join(name), int(index)

df = df.reindex(sorted(df.columns, key=index_splitter), axis=1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM