Chcę pogrupować moją ramkę danych według dwóch kolumn, a następnie posortować zagregowane wyniki w grupach.
In [167]:
df
Out[167]:
count job source
0 2 sales A
1 4 sales B
2 6 sales C
3 3 sales D
4 7 sales E
5 5 market A
6 3 market B
7 2 market C
8 4 market D
9 1 market E
In [168]:
df.groupby(['job','source']).agg({'count':sum})
Out[168]:
count
job source
market A 5
B 3
C 2
D 4
E 1
sales A 2
B 4
C 6
D 3
E 7
Chciałbym teraz posortować kolumnę zliczania w porządku malejącym w każdej z grup. A potem weź tylko trzy górne rzędy. Aby uzyskać coś takiego:
count
job source
market A 5
D 4
B 3
sales E 7
C 6
B 4
order
jest przestarzałe, użyjsort_values
zamiast tegoMożesz również zrobić to za jednym razem, wykonując najpierw sortowanie i używając głowy, aby wziąć pierwsze 3 z każdej grupy.
źródło
groupby
gwarantuje, że zamówienie zostanie zachowane?Oto inny przykład wybierania najlepszych 3 w kolejności posortowanej i sortowania w grupach:
źródło
Spróbuj zamiast tego
prosty sposób na „grupowanie” i sortowanie w porządku malejącym
źródło
Jeśli nie musisz sumować kolumny, użyj odpowiedzi @ tvashtar. Jeśli musisz podsumować, możesz użyć odpowiedzi @joris lub tej, która jest do niej bardzo podobna.
źródło