Ich versuche, meine Pivot-Tabellenspalten basierend auf Listen zu sortieren, die meine bevorzugte Sortierung enthalten. Beispiel unten:
df = pd.DataFrame({'Name':['name1', 'name2', 'name1', 'name2', 'name2','name2'],
'Block':['Block 1','Block 1', 'Block 10','Block 2','Block 2','Block 2'],
'Week':['wk1','wk2','wk42','wk11','wk9','wk8'],
'Date':['01/15/2020','01/20/2020','11/29/2020','05/01/2020','04/20/2020','04/15/2020'],
'Events':['SIR','','','RSNA', '','CORE'],
'Rotation':['ABD','MAM','ER','UMH','PEDI','VIR']
})
df_summary = df.pivot_table(index=['Rotation'], columns=['Block','Week','Date','Events'], values='Name', aggfunc="count").fillna(0).astype(int)
was die folgende Pivot-Tabelle erzeugt
Die Spalten der Pivot-Tabelle befinden sich nicht in der bevorzugten Reihenfolge. Ich möchte die Sortierung meiner Listen verwenden:
blocks = ['Block 1','Block 2','Block 10']
weeks = ['wk1','wk2','wk8','wk9','wk11','wk42']
dates = ['01/15/2020','01/20/2020','04/15/2020','04/20/2020','05/01/2020','11/29/2020']
Also habe ich es versucht .reindex
(siehe unten), bekomme aber immer einen Fehler - TypeError: Expected tuple, got str
df_summary = df_summary.reindex(columns=blocks)
oder
df_summary = df_summary.reindex(columns=blocks,weeks,dates)
Kann dies mithilfe von Neuindizierung mit Listen erfolgen? Sollte ich versuchen, mit Wörterbüchern neu zu indizieren? Jede Hilfe wäre sehr dankbar!
Einfache Verwendung pd.crosstab
mitnatsorted
from natsort import natsorted
df.Block=pd.Categorical(df.Block,categories=natsorted(df.Block.unique()),ordered=True)
s=pd.crosstab(df.Rotation,[df.Block,df.Week,df.Date,df.Events]).sort_index(level=0,axis=1)
s
Out[305]:
Block Block 1 Block 2 Block 10
Week wk1 wk2 wk11 wk8 wk9 wk42
Date 01/15/2020 01/20/2020 05/01/2020 04/15/2020 04/20/2020 11/29/2020
Events SIR RSNA CORE
Rotation
ABD 1 0 0 0 0 0
ER 0 0 0 0 0 1
MAM 0 1 0 0 0 0
PEDI 0 0 0 0 1 0
UMH 0 0 1 0 0 0
VIR 0 0 0 1 0 0
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen