Сортировка MultiIndex DataFrame - PullRequest
       27

Сортировка MultiIndex DataFrame

0 голосов
/ 30 марта 2020

Я искал способ отсортировать каждую пару уровня строки 0, уровня столбца 1 в MultiIndex DataFrame по значениям, которые они содержат, но пока мне не повезло. Например, если мой DataFrame выглядит как

import numpy as np
import pandas as pd

np.random.seed(7)
tup = (('A', 'B'), np.arange(2))
index = pd.MultiIndex.from_product(tup, names=('row-lvl 0', 'row-lvl 1'))
tup = (('X', 'Y'), ('q', 'p'))
columns = pd.MultiIndex.from_product(tup, names=('col-lvl 0', 'col-lvl 1'))
data = np.random.rand(4, 4)
df = pd.DataFrame(data, index=index, columns=columns)
print(df)

col-lvl 0                   X                   Y          
col-lvl 1                   q         p         q         p
row-lvl 0 row-lvl 1                                        
A         0          0.076308  0.779919  0.438409  0.723465
          1          0.977990  0.538496  0.501120  0.072051
B         0          0.268439  0.499883  0.679230  0.803739
          1          0.380941  0.065936  0.288146  0.909594

, я бы хотел, чтобы он сортировался в порядке возрастания, чтобы он выглядел как

col-lvl 0                   X                   Y          
col-lvl 1                   q         p         q         p
row-lvl 0 row-lvl 1                                        
A         0          0.076308  0.538496  0.438409  0.072051
          1          0.977990  0.779919  0.501120  0.723465
B         0          0.268439  0.065936  0.288146  0.803739
          1          0.380941  0.499883  0.679230  0.909594

Я прочитал документацию pandas для sort_values и sort_index, но они, кажется, не то, что я ищу. Любая помощь с этим будет принята с благодарностью.

1 Ответ

1 голос
/ 30 марта 2020

Это не sort_values, поскольку вы игнорируете влияние index, проверяйте только значение

for x , y in df.groupby(level=0):
...     df.loc[x]=np.sort(y.values,0)
...     
df
col-lvl 0                   X                   Y          
col-lvl 1                   q         p         q         p
row-lvl 0 row-lvl 1                                        
A         0          0.076308  0.538496  0.438409  0.072051
          1          0.977990  0.779919  0.501120  0.723465
B         0          0.268439  0.065936  0.288146  0.803739
          1          0.380941  0.499883  0.679230  0.909594
...