Не уверен, что я понял, какой именно обзор вам нужен, но это также возможно при использовании groupby
, а затем метода agg
, подобного следующему:
overview = df.groupby('cust').agg({'val0':'sum',
'cat':'max'}).reset_index().sort_values('val0', ascending=False)
cust val0 cat
1 cust1 7.19 cat4
0 cust0 2.54 cat4
2 cust2 1.25 cat1
Так что это агрегируется на уровне клиентаи суммирует их общие расходы и показывает категорию, на которую они потратили больше всего.
Вам не нужно использовать функцию reset_index()
, в этом случае она дает следующее:
overview = df.groupby('cust').agg({'val0':'sum',
'cat':'max'}).sort_values('val0', ascending=False)
val0 cat
cust
cust1 7.19 cat4
cust0 2.54 cat4
cust2 1.25 cat1
И Наконец Если вы хотите, чтобы 5 лучших клиентов, вы можете просто использовать .head(5)
, так как значения уже отсортированы по убыванию:
overview = df.groupby('cust').agg({'val0':'sum',
'cat':'max'}).sort_values('val0', ascending=False).head(5)