ReOrder Column в сводной таблице - PullRequest
0 голосов
/ 14 февраля 2019

Я ищу способ изменить порядок столбцов в моей сводной таблице

Здесь редкие мои столбцы:

pivot.columns
pivot = dfpivot.pivot_table(index=['DEPARTMENT_NAME','LEVEL_NAME','NAME','CLTNAME'],columns=['StaffitWeek'], values=['ASSIGN_TIME'], margins=False, aggfunc=np.sum,fill_value=0)
pivot.columns

вывод:

MultiIndex(levels=[['ASSIGN_TIME'], ['S10', 'S11', 'S12', 'S13', 'S14', 'S15', 'S16', 'S17', 'S18', 'S19', 'S6', 'S7', 'S8', 'S9']],
           labels=[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]],
           names=[None, 'StaffitWeek'])

Я бы хотелчтобы изменить порядок столбцов уровня и получить порядок S6 S7 S8 S9 S10 S11 S12 S13 S14 S15 S16 S17 S18 S19.

Я перепробовал много тем, но мне не удалось это сделать.

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 14 февраля 2019

Сначала удалите [], чтобы избежать MultiIndex в столбцах:

df = dfpivot.pivot_table(index=['DEPARTMENT_NAME','LEVEL_NAME','NAME','CLTNAME'],
                            columns='StaffitWeek', 
                            values='ASSIGN_TIME', 
                            aggfunc=np.sum,
                            fill_value=0)

А затем выполните сортировку по именам столбцов в sorted функции с удалением первой буквы путем индексации:

df = df[sorted(df.columns, key=lambda x: int(x[1:]))]

Или используйте str.extract для извлечения целых чисел, преобразования и получения позиции по аргументу:

df = df.iloc[:, df.columns.str.extract('(\d+)', expand=False).astype(int).argsort()]

Или используйте natsort:

import natsort as ns
df = df[sorted(ns.natsorted(df.columns), key=lambda x: not x.isdigit())]
...