Итак, для начала мой df5
выглядит так:
>>> df5
Ball Possession Result Team
cat type
cat0 0 38 0 PAOK
2 62 1 Chelsea
cat1 0 32 0 PAOK
2 68 1 Chelsea
cat2 0 76 4 Chelsea
2 24 1 Cardiff
cat3 0 78 4 Chelsea
2 22 1 Cardiff
cat4 0 76 2 Chelsea
2 24 0 Bournemouth
cat5 0 70 2 Chelsea
2 30 0 Bournemouth
cat6 0 21 1 Newcastle
2 79 2 Chelsea
Я не уверен, был ли ваш фрейм данных после .T
или нет.Вы можете переключаться при необходимости.В любом случае сначала нужно получить правильный порядок игр по Ball Possession:
df6 = df5.reset_index().groupby( 'cat' ).apply( lambda df: df.nlargest( 1, 'Ball Possession' ) )
самое старое выбирает большее значение Ball Possession для cat0, cat1, cat2.
df6
выглядит так:
>>> df6
cat type Ball Possession Result Team
cat
cat0 1 cat0 2 62 1 Chelsea
cat1 3 cat1 2 68 1 Chelsea
cat2 4 cat2 0 76 4 Chelsea
cat3 6 cat3 0 78 4 Chelsea
cat4 8 cat4 0 76 2 Chelsea
cat5 10 cat5 0 70 2 Chelsea
cat6 13 cat6 2 79 2 Chelsea
, затем завершите
order = df6.sort_values( 'Ball Possession', ascending=False )['cat'].values
, поэтому order
просто
>>> order
array(['cat6', 'cat3', 'cat2', 'cat4', 'cat5', 'cat1', 'cat0'], dtype=object)
, а затем используйте этот порядок на исходных данных,сортировка по уровню:
final = df5.reindex( order, level='cat' ).T
, который вам
cat cat6 cat3 cat2 cat4 cat5 cat1 cat0
type 0 2 0 2 0 2 0 2 0 2 0 2 0 2
Ball Possession 21 79 78 22 76 24 76 24 70 30 32 68 38 62
Result 1 2 4 1 4 1 2 0 2 0 0 1 0 1
Team Newcastle Chelsea Chelsea Cardiff Chelsea Cardiff Chelsea Bournemouth Chelsea Bournemouth PAOK Chelsea PAOK Chelsea
Надеюсь, это поможет!