I have a data frame like this
probe_names PLAGL1 GRB10 MEST H19 KCNQ1OT1 MEG3 MEG8 SNRPN PEG3 \
Jemima 0 0.55 0.53 0.53 0.47 0.62 0.11 0.83 0.50 0.49
1 0.51 0.46 0.53 0.52 0.47 0.00 0.91 0.47 0.54
2 NaN NaN NaN 0.55 NaN NaN NaN NaN 0.50
0 0.54 0.59 0.53 0.47 0.66 0.13 0.90 0.51 0.53
1 0.48 0.45 0.54 0.50 0.47 0.00 0.90 0.50 0.53
2 NaN NaN NaN 0.54 NaN NaN NaN NaN 0.53
Elena 0 0.54 0.55 0.55 0.57 0.53 0.58 0.55 0.52 0.45
1 0.53 0.49 0.53 0.65 0.38 0.62 0.48 0.49 0.55
2 NaN NaN NaN 0.66 NaN NaN NaN NaN 0.42
0 0.51 0.53 0.55 0.62 0.52 0.57 0.53 0.50 0.48
1 0.48 0.45 0.52 0.63 0.38 0.59 0.46 0.53 0.55
2 NaN NaN NaN 0.63 NaN NaN NaN NaN 0.45
And I want to add 2 empty/NaN rows each 3 rows
probe_names PLAGL1 GRB10 MEST H19 KCNQ1OT1 MEG3 MEG8 SNRPN PEG3 \
Jemima 0 0.55 0.53 0.53 0.47 0.62 0.11 0.83 0.50 0.49
1 0.51 0.46 0.53 0.52 0.47 0.00 0.91 0.47 0.54
2 NaN NaN NaN 0.55 NaN NaN NaN NaN 0.50
3
4
0 0.54 0.59 0.53 0.47 0.66 0.13 0.90 0.51 0.53
1 0.48 0.45 0.54 0.50 0.47 0.00 0.90 0.50 0.53
2 NaN NaN NaN 0.54 NaN NaN NaN NaN 0.53
3
4
Elena 0 0.54 0.55 0.55 0.57 0.53 0.58 0.55 0.52 0.45
1 0.53 0.49 0.53 0.65 0.38 0.62 0.48 0.49 0.55
2 NaN NaN NaN 0.66 NaN NaN NaN NaN 0.42
0 0.51 0.53 0.55 0.62 0.52 0.57 0.53 0.50 0.48
1 0.48 0.45 0.52 0.63 0.38 0.59 0.46 0.53 0.55
2 NaN NaN NaN 0.63 NaN NaN NaN NaN 0.45
3
4
I don't know how to do this in multi-index tables. I have checked on the internet but I can't see something really similar.
CodePudding user response:
reindex
to a MultiIndex:
#include an extra index level to differentiate between duplicated indices
df = df.set_index(df.groupby(level=[0,1],sort=False).cumcount(),append=True)
#create a 3-level multiindex
midx = pd.MultiIndex.from_product([df.index.levels[0],range(df.index.levels[1].max() 3),df.index.levels[2]])
#reindex, sort, and drop the extra level
output = df.reindex(midx).sort_index(level=[0,2],ascending=[False,True]).droplevel(2)
>>> output
PLAGL1 GRB10 MEST H19 KCNQ1OT1 MEG3 MEG8 SNRPN PEG3
Jemima 0 0.55 0.53 0.53 0.47 0.62 0.11 0.83 0.50 0.49
1 0.51 0.46 0.53 0.52 0.47 0.00 0.91 0.47 0.54
2 NaN NaN NaN 0.55 NaN NaN NaN NaN 0.50
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN 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 0.53
1 0.48 0.45 0.54 0.50 0.47 0.00 0.90 0.50 0.53
2 NaN NaN NaN 0.54 NaN NaN NaN NaN 0.53
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN NaN NaN NaN
Elena 0 0.54 0.55 0.55 0.57 0.53 0.58 0.55 0.52 0.45
1 0.53 0.49 0.53 0.65 0.38 0.62 0.48 0.49 0.55
2 NaN NaN NaN 0.66 NaN NaN NaN NaN 0.42
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN 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 0.48
1 0.48 0.45 0.52 0.63 0.38 0.59 0.46 0.53 0.55
2 NaN NaN NaN 0.63 NaN NaN NaN NaN 0.45
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN NaN NaN NaN