Angesichts der folgenden DatenrahmenPandas Art von Gruppe zu aggregieren und Spalte
In [31]: rand = np.random.RandomState(1)
df = pd.DataFrame({'A': ['foo', 'bar', 'baz'] * 2,
'B': rand.randn(6),
'C': rand.rand(6) > .5})
In [32]: df
Out[32]: A B C
0 foo 1.624345 False
1 bar -0.611756 True
2 baz -0.528172 False
3 foo -1.072969 True
4 bar 0.865408 False
5 baz -2.301539 True
Ich mag würde es in Gruppen sortieren (A
) durch die aggregierte Summe von B
, und dann durch den Wert in C
(nicht aggregierten) . Deshalb sollte man im Grunde die Reihenfolge der A
Gruppen mit
In [28]: df.groupby('A').sum().sort('B')
Out[28]: B C
A
baz -2.829710 1
bar 0.253651 1
foo 0.551377 1
Und dann von True/False, so dass es letztlich wie folgt aussieht:
In [30]: df.ix[[5, 2, 1, 4, 3, 0]]
Out[30]: A B C
5 baz -2.301539 True
2 baz -0.528172 False
1 bar -0.611756 True
4 bar 0.865408 False
3 foo -1.072969 True
0 foo 1.624345 False
Wie dies geschehen kann?
Ich nahm auch an, dass 'groupby's' sort = False 'Flag eine beliebige, nicht unbedingt sortierte Reihenfolge zurückgibt (ich nehme an, dass ich sie aus irgendeinem Grund mit Python-Wörterbüchern assoziiere). Aber diese Antwort impliziert, dass das Flag die ursprüngliche Reihenfolge der Datenframezeilen garantiert erhält? – beardc
Ich bin zu 99% sicher, dass die Reihenfolge der Gruppen bei ihrem ersten Erscheinen erhalten bleibt. Ich habe keinen Code, um dies zu untermauern, aber einige schnelle Tests bestätigen diese Intuition. – Zelazny7
Danke @ Zelazny7 für diese Antwort. Es ist genau das, was ich will. Es scheint jedoch im neuesten Pandas-Paket, um 'Out [7]' zu erreichen, 'inplace = True' zu den Argumenten in 'Input [7]' hinzuzufügen. – MoonKnight