мультииндексирование с сортировкой по значениям - Панды - PullRequest
1 голос
/ 26 марта 2019

Я пытаюсь вернуть значение max из двух Columns в pandas df.Я хочу сгруппировать и отсортировать эти значения, чтобы все отображались от max до min.

Вот моя попытка:

import pandas as pd

d = ({
    'Day' : ['Mon','Wed','Sat','Mon','Wed','Sat','Mon','Wed','Sat','Mon','Wed','Sat'],        
    'Object' : ['X','X','X','Y','Y','Y','X','X','X','Y','Y','Y'],                 
    'Value' : [1,1,1,2,2,2,3,3,3,4,4,4],                                     
    })

df = pd.DataFrame(data = d)

df = df.groupby(['Day','Object']).Value.max()

df.groupby('Day').transform(pd.Series.sort_values,ascending=False)

Out:

Day  Object
Mon  X         3
     Y         4
Sat  X         3
     Y         4
Wed  X         3
     Y         4

Предназначен:

Day  Object
Mon  Y         4
     X         3
     Y         2
     X         1
Sat  Y         4
     X         3
     Y         2
     X         1
Wed  Y         4
     X         3
     Y         2
     X         1

1 Ответ

3 голосов
/ 26 марта 2019
df = pd.DataFrame({
    'Day': ['Mon', 'Mon', 'Mon', 'Mon', 'Wed', 'Wed', 'Wed', 'Wed', 'Sat', 'Sat', 'Sat', 'Sat'],
    'Object': ['X', 'Y', 'X', 'Y', 'X', 'Y', 'X', 'Y', 'X', 'Y', 'X', 'Y'],
    'Value': [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],
})
df = df.sort_values(['Day', 'Value'], ascending=[1, 0])
df = df.set_index(['Day', 'Object'])

print(df)

выход

            Value
Day Object       
Mon Y           4
    X           3
    Y           2
    X           1
Sat Y           4
    X           3
    Y           2
    X           1
Wed Y           4
    X           3
    Y           2
    X           1
...