In Pandas How To Sort One Level Of A Multi-index Based On The Values Of A Column, While Maintaining The Grouping Of The Other Level
I'm taking a Data Mining course at university right now, but I'm a wee bit stuck on a multi-index sorting problem. The actual data involves about 1 million reviews of movies, and
Solution 1:
You're looking for sort:
In [11]: s = pd.Series([3, 1, 2], [[1, 1, 2], [1, 3, 1]])
In [12]: s.sort()
In [13]: s
Out[13]:
1 3 1
2 1 2
1 1 3
dtype: int64
Note; this works inplace (i.e. modifies s), to return a copy use order:
In [14]: s.order()
Out[14]:
1 3 1
2 1 2
1 1 3
dtype: int64
Update: I realised what you were actually asking, and I think this ought to be an option in sortlevels, but for now I think you have to reset_index, groupby and apply:
In [21]: s.reset_index(name='s').groupby('level_0').apply(lambda s: s.sort('s')).set_index(['level_0', 'level_1'])['s']
Out[21]:
level_0 level_1
1 3 1
1 3
2 1 2
Name: 0, dtype: int64
Note: you can set the level names to [None, None] afterwards.
Post a Comment for "In Pandas How To Sort One Level Of A Multi-index Based On The Values Of A Column, While Maintaining The Grouping Of The Other Level"