I have a multiIndex data frame like this
JavaScript
x
32
32
1
probe_names PLAGL1 GRB10 MEST H19 KCNQ1OT1 MEG3 MEG8 SNRPN
2
Patient_1 0 0.55 0.53 0.53 0.47 0.62 0.11 0.83 0.50
3
1 0.51 0.46 0.53 0.52 0.47 0.00 0.91 0.47
4
2 NaN NaN NaN 0.55 NaN NaN NaN NaN
5
3 NaN NaN NaN NaN NaN NaN NaN NaN
6
4 NaN NaN NaN NaN NaN NaN NaN NaN
7
0 0.54 0.59 0.53 0.47 0.66 0.13 0.90 0.51
8
1 0.48 0.45 0.54 0.50 0.47 0.00 0.90 0.50
9
2 NaN NaN NaN 0.54 NaN NaN NaN NaN
10
3 NaN NaN NaN NaN NaN NaN NaN NaN
11
4 NaN NaN NaN NaN NaN NaN NaN NaN
12
Patient_3 0 0.54 0.50 0.58 0.52 0.31 0.62 0.53 0.56
13
1 0.57 0.49 0.53 0.57 0.09 0.53 0.52 0.50
14
2 NaN NaN NaN 0.57 NaN NaN NaN NaN
15
3 NaN NaN NaN NaN NaN NaN NaN NaN
16
4 NaN NaN NaN NaN NaN NaN NaN NaN
17
0 0.49 0.49 0.53 0.48 0.27 0.58 0.53 0.53
18
1 0.51 0.45 0.50 0.52 0.09 0.51 0.50 0.49
19
2 NaN NaN NaN 0.51 NaN NaN NaN NaN
20
3 NaN NaN NaN NaN NaN NaN NaN NaN
21
4 NaN NaN NaN NaN NaN NaN NaN NaN
22
Patient_2 0 0.54 0.55 0.55 0.57 0.53 0.58 0.55 0.52
23
1 0.53 0.49 0.53 0.65 0.38 0.62 0.48 0.49
24
2 NaN NaN NaN 0.66 NaN NaN NaN NaN
25
3 NaN NaN NaN NaN NaN NaN NaN NaN
26
4 NaN NaN NaN NaN NaN NaN NaN NaN
27
0 0.51 0.53 0.55 0.62 0.52 0.57 0.53 0.50
28
1 0.48 0.45 0.52 0.63 0.38 0.59 0.46 0.53
29
2 NaN NaN NaN 0.63 NaN NaN NaN NaN
30
3 NaN NaN NaN NaN NaN NaN NaN NaN
31
4 NaN NaN NaN NaN NaN NaN NaN NaN
32
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
JavaScript
1
2
1
['Patient_1', 'Patient_2', 'Patient_3']
2
I could use this, couldn’t I?
Advertisement
Answer
IIUC, you can simply use loc
.
Here is a dummy example:
JavaScript
1
15
15
1
df = pd.DataFrame(np.arange(3**3).reshape(9,3),
2
columns=list('123'),
3
index=pd.MultiIndex.from_product((list('ACB'), range(3))))
4
5
1 2 3
6
A 0 0 1 2
7
1 3 4 5
8
2 6 7 8
9
C 0 9 10 11
10
1 12 13 14
11
2 15 16 17
12
B 0 18 19 20
13
1 21 22 23
14
2 24 25 26
15
reordering:
JavaScript
1
14
14
1
l = ['A', 'B', 'C']
2
df.loc[l]
3
4
1 2 3
5
A 0 0 1 2
6
1 3 4 5
7
2 6 7 8
8
B 0 18 19 20
9
1 21 22 23
10
2 24 25 26
11
C 0 9 10 11
12
1 12 13 14
13
2 15 16 17
14