pandas - How to sort multi-indexed rows -
if df pandas dataframe 5-level multi-index on rows, there less stupid way achieve ordering produced this:
(df.sortlevel(3, sort_remaining=false) .sortlevel(2, sort_remaining=false) .sortlevel(0, sort_remaining=false) .sortlevel(1, sort_remaining=false) .sortlevel(4, sort_remaining=false)) ?
nb: of following produce orderings different produced expression above:
df.sortlevel([4, 1, 0, 2, 3], sort_remaining=false) df.sortlevel([4, 1, 0, 2, 3], sort_remaining=true) df.sortlevel([3, 2, 0, 1, 4], sort_remaining=false) df.sortlevel([3, 2, 0, 1, 4], sort_remaining=true)
yes! don't use sortlevel. use sort_index level=[4, 1, 0, 2, 3]
consider dataframe df
from string import ascii_uppercase import pandas pd f = lambda n: np.random.choice(list(ascii_uppercase), n, false) mux = pd.multiindex.from_product([f(2) _ in range(5)]) df = pd.series(range(32), mux, name='one').to_frame() print(df) 1 t b w g u 0 p 1 m u 2 p 3 g g u 4 p 5 m u 6 p 7 v w g u 8 p 9 m u 10 p 11 g g u 12 p 13 m u 14 p 15 r b w g u 16 p 17 m u 18 p 19 g g u 20 p 21 m u 22 p 23 v w g u 24 p 25 m u 26 p 27 g g u 28 p 29 m u 30 p 31 then sort
df.sort_index(level=[4, 1, 0, 2, 3]) 1 r b g g p 21 v g g p 29 b g m p 23 v g m p 31 b w g p 17 v w g p 25 b w m p 19 v w m p 27 t b g g p 5 v g g p 13 b g m p 7 v g m p 15 b w g p 1 v w g p 9 b w m p 3 v w m p 11 r b g g u 20 v g g u 28 b g m u 22 v g m u 30 b w g u 16 v w g u 24 b w m u 18 v w m u 26 t b g g u 4 v g g u 12 b g m u 6 v g m u 14 b w g u 0 v w g u 8 b w m u 2 v w m u 10 since sorted levels, there no need sort_remaining=false
Comments
Post a Comment