2016-05-01 8 views
1

Ich habe die follwing Pivot-Tabelle in Pandas:Neue Reihenfolge in Pivot-Tabelle

Division    BU/CF  Allocation Key CurrentHC 

0 Central Functions  A   NEF   3 
1      B   NEF   2 
2      C   EXP   1 
3          NEF   4 
4      D   NEF   3 
5 Xerxes    E   NLE   4 
6      F   NLE   1 
7      G   NLE   1 
8      H   NLE   5 

Python sortiert offensichtlich die Teilung und BU/alphabetisch CF. Wie kann ich meine eigene Bestellung auf die Pivot-Tabelle anwenden?

gewünschte Ausgabe:

Division    BU/CF  Allocation Key CurrentHC 
0 Central Functions  D   NEF   3 
1      B   NEF   2 
2      C   EXP   1 
3          NEF   4 
4      A   NEF   3 
5 Xerxes    E   NLE   4 
6      H   NLE   5 
7      G   NLE   1 
8      F   NLE   1 

-Code benutzte ich die Pivot-Tabelle zu erstellen:

#Create full report pivot 
report_pivot = pd.pivot_table(full_report, index=["Division","BU/CF", "Allocation Key"], 
         values=["Previous HC", "New Hire", "Resigned", "In", "Out", "Current HC", "Delta"], 

         fill_value=0) 

ich die Spalten neu zu ordnen verwaltet, indem Sie diese:

# Reorderr columns 
cols = [ "Previous HC", "New Hire", "Resigned", "In", "Out","Delta", "Current HC"] 
report_pivot = report_pivot[cols] 

Gibt es eine ähnlicher Weg für den Index. Insbesondere "BU/CF"

* I ausgeschlossen, die anderen Spalten mit Ausnahme der laufenden HC in den Tabellen oben

+1

Vielleicht hilft das: http://stackoverflow.com/questions/10595327/pandas-sort-pivot-table Bitte geben Sie einen vollständigen Code und Daten, damit wir eine Lösung leicht anpassen können. – tfv

+0

Ich habe den Code, den ich verwendet habe, um die Pivot-Tabelle – alpenmilch411

+0

mit Blick auf Ihre gewünschte DF hinzugefügt, es ist absolut nicht klar, was bedeutet, "meine eigene Bestellung". Können Sie die Sortierkriterien definieren? – MaxU

Antwort

1

zu vereinfachen und können Sie etwas tun:

In [62]: sort_map = { 
    ....: 'E': 10, 
    ....: 'H': 20, 
    ....: 'G': 30, 
    ....: 'F': 40, 
    ....: } 

In [63]: df.loc[df['Division'] == 'Xerxes', 'BU/CF'].map(sort_map) 
Out[63]: 
5 10 
6 40 
7 30 
8 20 
Name: BU/CF, dtype: int64 

In [64]: idx = df.loc[df['Division'] == 'Xerxes', 'BU/CF'].map(sort_map).sort_values().index 

In [65]: idx 
Out[65]: Int64Index([5, 8, 7, 6], dtype='int64') 

In [66]: df[df['Division'] == 'Xerxes'].reindex(idx) 
Out[66]: 
    Division BU/CF AllocationKey CurrentHC 
5 Xerxes  E   NLE   4 
8 Xerxes  H   NLE   5 
7 Xerxes  G   NLE   1 
6 Xerxes  F   NLE   1 

UPDATE :

ab Pandas 0,20.1 the .ix indexer is deprecated, in favor of the more strict .iloc and .loc indexers.