Ich habe Daten prognostiziert, die ich nach Monat gruppiert. Die ursprüngliche Datenrahmen etwas wie folgt aus:Pandas reorder Teilmenge von Spalten aus einem gruppierten Datenrahmen
>>clean_table_grouped[0:5]
STYLE COLOR SIZE FOR
MONTH 01/17 10/16 11/16 12/16
0 ####### ###### #### 0.0 15.0 15.0 15.0
1 ####### ###### #### 0.0 15.0 15.0 15.0
2 ####### ###### #### 0.0 15.0 15.0 15.0
3 ####### ###### #### 0.0 15.0 15.0 15.0
4 ####### ###### #### 0.0 15.0 15.0 15.0
>>clean_table_grouped.ix[0:,"FOR"][0:5]
MONTH 01/17 10/16 11/16 12/16
0 0.0 15.0 15.0 15.0
1 0.0 15.0 15.0 15.0
2 0.0 15.0 15.0 15.0
3 0.0 15.0 15.0 15.0
4 0.0 15.0 15.0 15.0
Ich will einfach diese 4 Spalten in der Folge Art und Weise neu ordnen:
(wobei der Rest der Datenrahmen unberührt)
MONTH 10/16 11/16 12/16 01/17
0 15.0 15.0 15.0 0.0
1 15.0 15.0 15.0 0.0
2 15.0 15.0 15.0 0.0
3 15.0 15.0 15.0 0.0
4 15.0 15.0 15.0 0.0
Meine Die versuchte Lösung bestand darin, die Spalten der Teilmenge neu zu ordnen, die dem folgenden Post folgte: How to change the order of DataFrame columns?
Ich ging davon durch die Spaltenliste greifen und es erste
>>for_cols = clean_table_grouped.ix[:,"FOR"].columns.tolist()
>>for_cols.sort(key = lambda x: x[0:2]) #sort by month ascending
>>for_cols.sort(key = lambda x: x[-2:]) #then sort by year ascending
Abfrage der Datenrahmen Sortierung funktioniert gut
>>clean_table_grouped.ix[0:,"FOR"][for_cols]
MONTH 10/16 11/16 12/16 01/17
0 15.0 15.0 15.0 0.0
1 15.0 15.0 15.0 0.0
2 15.0 15.0 15.0 0.0
3 15.0 15.0 15.0 0.0
4 15.0 15.0 15.0 0.0
Allerdings, wenn ich versuche, Werte in der ursprünglichen Tabelle zu setzen, ich erhalten eine Tabelle von "NaN":
>>clean_table_grouped.ix[0:,"FOR"] = clean_table_grouped.ix[0:,"FOR"][for_cols]
>>clean_table_grouped.ix[0:,"FOR"]
MONTH 01/17 10/16 11/16 12/16
0 NaN NaN NaN NaN
1 NaN NaN NaN NaN
2 NaN NaN NaN NaN
3 NaN NaN NaN NaN
4 NaN NaN NaN NaN
5 NaN NaN NaN NaN
ich auch gekettet Syntax zu vermeiden versucht haben, zippen (.IX [] []). Dies vermeidet die NaN, ist es jedoch nicht die Datenrahmen ändert -__-
>>for_cols = zip(["FOR", "FOR", "FOR", "FOR"], for_cols)
>>clean_table_grouped.ix[0:,"FOR"] = clean_table_grouped.ix[0:,for_cols]
>>clean_table_grouped.ix[0:,"FOR"]
MONTH 01/17 10/16 11/16 12/16
0 0.0 15.0 15.0 15.0
1 0.0 15.0 15.0 15.0
2 0.0 15.0 15.0 15.0
3 0.0 15.0 15.0 15.0
4 0.0 15.0 15.0 15.0
Ich weiß, ich bin mit ix Werte neu zuzuweisen. Allerdings habe ich diese Technik in der Vergangenheit auf Datenrahmen verwendet, die nicht gruppiert sind, und es hat gut funktioniert.
Wenn diese Frage bereits in einem anderen Beitrag (in einer klaren Weise) beantwortet wurde, bitte den Link angeben. Ich suchte, konnte aber nichts Ähnliches finden.
EDIT: Ich habe eine Lösung gefunden. Manuelles Neuindizieren durch Erstellen eines neuen Multiindex-Datenrahmens in der Reihenfolge, in der die Spalten sortiert werden sollen. Ich habe die folgende Lösung veröffentlicht.
Wie ist die Struktur Ihres ursprünglichen DataFrame? –