首页 > 解决方案 > 有没有办法从 pandas python 中的列名中的分隔符创建列的层次结构?

问题描述

我有一个包含 500 多列的数据集,它们看起来最初位于已展平的层次结构中,并且它们的新标题已与下划线连接(参见下面的示例)。

有没有办法拉出每个级别并重新创建层次结构?

这是数据集中某些列的示例:
['CEO_FEM_CAS', 'CEO_FEM_FTCONT', 'CEO_FEM_FTPERM', 'CEO_FEM_PTCONT', 'CEO_FEM_PTPERM', 'CEO_MAL_CAS', 'CEO_MAL_FTCONT', 'CEO_MAL_FTPERM', 'CEO_MAL_PTCONT', 'CEO_MAL_PTPERM','KMP_FEM_CAS','KMP_FEM_FTCONT','KMP_FEM_FTPERM','KMP_FEM_PTCONT','KMP_FEM_PTPERM','KMP_MAL_CAS','KMP_MAL_FTCONT','KMP_MAL_FTPERM','KMP_MAL_PTCONT_'MALMP_K

我想要得到的层次结构是:
Desired Hierarchy of Columns

解释: CEO和KMP是0级,FEM和MAL是1级,CAS、FTCONTRACT、FTPERM、PTCONT、PTPERM是2级

我希望能够在 Python 中的 Pandas 中实现这一点,但如果有一种简单的方法,我也对 R 持开放态度。

预先感谢您的任何帮助!

标签: pythonpandas

解决方案


您可以在 pandas 中创建一个multiIndex,如下所示:

import pandas as pd

column_names = [
    'CEO_FEM_CAS', 'CEO_FEM_FTCONT', 'CEO_FEM_FTPERM', 'CEO_FEM_PTCONT', 
    'CEO_FEM_PTPERM', 'CEO_MAL_CAS', 'CEO_MAL_FTCONT', 'CEO_MAL_FTPERM', 
    'CEO_MAL_PTCONT', 'CEO_MAL_PTPERM', 'KMP_FEM_CAS', 'KMP_FEM_FTCONT', 
    'KMP_FEM_FTPERM', 'KMP_FEM_PTCONT', 'KMP_FEM_PTPERM', 'KMP_MAL_CAS', 
    'KMP_MAL_FTCONT', 'KMP_MAL_FTPERM', 'KMP_MAL_PTCONT', 'KMP_MAL_PTPERM',]

first_part = []
second_part = []
third_part = []

for column_name in column_names:
    split_column_name = column.split('_')
    first_part.append(split_column_name[0])
    second_part.append(split_column_name[1])
    third_part.append(split_column_name[2])

df = pd.DataFrame(columns=[first_part, second_part, third_part])

推荐阅读