[英]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.