Ich habe einige Code, der einen Datenrahmen enthält die berühmte Titanic-Datensatz wie folgt zusammenfaßt:Reindizieren einen Pegel eines Multiindex zu beliebiger Reihenfolge in Pandas
titanic['agecat'] = pd.cut(titanic.age, [0, 13, 20, 64, 100],
labels=['child', 'adolescent', 'adult', 'senior'])
titanic.groupby(['agecat', 'pclass','sex']
)['survived'].mean()
Daraus ergibt sich die folgende Datenrahmen mit einem Multiindex basierend auf dem groupby
Aufruf :
agecat pclass sex
adolescent 1 female 1.000000
male 0.200000
2 female 0.923077
male 0.117647
3 female 0.542857
male 0.125000
adult 1 female 0.965517
male 0.343284
2 female 0.868421
male 0.078125
3 female 0.441860
male 0.159184
child 1 female 0.000000
male 1.000000
2 female 1.000000
male 1.000000
3 female 0.483871
male 0.324324
senior 1 female 1.000000
male 0.142857
2 male 0.000000
3 male 0.000000
Name: survived, dtype: float64
Allerdings möchte ich die agecat
Ebene des Multiindex eher natürlich bestellt werden, als alphabetisch geordnet, das heißt: ['child', 'adolescent', 'adult', 'senior']
. Allerdings, wenn ich versuche reindex
mit, dies zu tun:
titanic.groupby(['agecat', 'pclass','sex'])['survived'].mean().reindex(
['child', 'adolescent', 'adult', 'senior'], level='agecat')
es hat keine Auswirkungen auf dem resultierenden Datenrahmen des Multiindex. Sollte das funktionieren oder verwende ich den falschen Ansatz?
Ich denke, was Sie vorschlagen, * sollte * arbeiten, siehe den Kommentar hier: https://github.com/pydata/pandas/blob/master/pandas/core/index.py#L1346, pls op en ein Verbesserungsproblem für diese – Jeff
Leider hat das OP Recht, 'Dataframe.reindex()' ist gebrochen, wenn das Schlüsselwort 'level' verwendet wird, sogar in der neuesten Pandas Entwicklung Zweig ab diesem Datum. Siehe https://github.com/pydata/pandas/issues/4088 –