Home > Software engineering >  Sort multiIndex table based on other table
Sort multiIndex table based on other table

Time:05-06

I have a multiIndex data frame like this

probe_names         PLAGL1  GRB10  MEST   H19  KCNQ1OT1  MEG3  MEG8  SNRPN  \
Patient_1        0    0.55   0.53  0.53  0.47      0.62  0.11  0.83   0.50   
                 1    0.51   0.46  0.53  0.52      0.47  0.00  0.91   0.47   
                 2     NaN    NaN   NaN  0.55       NaN   NaN   NaN    NaN   
                 3     NaN    NaN   NaN   NaN       NaN   NaN   NaN    NaN   
                 4     NaN    NaN   NaN   NaN       NaN   NaN   NaN    NaN   
                 0    0.54   0.59  0.53  0.47      0.66  0.13  0.90   0.51   
                 1    0.48   0.45  0.54  0.50      0.47  0.00  0.90   0.50   
                 2     NaN    NaN   NaN  0.54       NaN   NaN   NaN    NaN   
                 3     NaN    NaN   NaN   NaN       NaN   NaN   NaN    NaN   
                 4     NaN    NaN   NaN   NaN       NaN   NaN   NaN    NaN   
Patient_3        0    0.54   0.50  0.58  0.52      0.31  0.62  0.53   0.56   
                 1    0.57   0.49  0.53  0.57      0.09  0.53  0.52   0.50   
                 2     NaN    NaN   NaN  0.57       NaN   NaN   NaN    NaN   
                 3     NaN    NaN   NaN   NaN       NaN   NaN   NaN    NaN   
                 4     NaN    NaN   NaN   NaN       NaN   NaN   NaN    NaN   
                 0    0.49   0.49  0.53  0.48      0.27  0.58  0.53   0.53   
                 1    0.51   0.45  0.50  0.52      0.09  0.51  0.50   0.49   
                 2     NaN    NaN   NaN  0.51       NaN   NaN   NaN    NaN   
                 3     NaN    NaN   NaN   NaN       NaN   NaN   NaN    NaN   
                 4     NaN    NaN   NaN   NaN       NaN   NaN   NaN    NaN   
Patient_2        0    0.54   0.55  0.55  0.57      0.53  0.58  0.55   0.52   
                 1    0.53   0.49  0.53  0.65      0.38  0.62  0.48   0.49   
                 2     NaN    NaN   NaN  0.66       NaN   NaN   NaN    NaN   
                 3     NaN    NaN   NaN   NaN       NaN   NaN   NaN    NaN   
                 4     NaN    NaN   NaN   NaN       NaN   NaN   NaN    NaN   
                 0    0.51   0.53  0.55  0.62      0.52  0.57  0.53   0.50   
                 1    0.48   0.45  0.52  0.63      0.38  0.59  0.46   0.53   
                 2     NaN    NaN   NaN  0.63       NaN   NaN   NaN    NaN   
                 3     NaN    NaN   NaN   NaN       NaN   NaN   NaN    NaN   
                 4     NaN    NaN   NaN   NaN       NaN   NaN   NaN    NaN  

and I have another similar table whose index is Patient_1, Patient_2 and Patient_3. I want to order my table like that. Patients are actually names and the number of patients can change depending on the input data. In the table I want to re-order, there are 10 rows per patient, in the one with the patient in the right order, each patient has 6 rows.

How can I do this? In a non-multiindex table, I normally convert the index into a list and then use that list to sort the table. But here I don't know how to do this.

EDIT: I also have a list with this

['Patient_1', 'Patient_2', 'Patient_3']

I could use this, couldn't I?

CodePudding user response:

IIUC, you can simply use loc.

Here is a dummy example:

df = pd.DataFrame(np.arange(3**3).reshape(9,3),
                  columns=list('123'),
                  index=pd.MultiIndex.from_product((list('ACB'), range(3))))

      1   2   3
A 0   0   1   2
  1   3   4   5
  2   6   7   8
C 0   9  10  11
  1  12  13  14
  2  15  16  17
B 0  18  19  20
  1  21  22  23
  2  24  25  26

reordering:

l = ['A', 'B', 'C']
df.loc[l]

      1   2   3
A 0   0   1   2
  1   3   4   5
  2   6   7   8
B 0  18  19  20
  1  21  22  23
  2  24  25  26
C 0   9  10  11
  1  12  13  14
  2  15  16  17
  • Related