-
-
Notifications
You must be signed in to change notification settings - Fork 18.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
BUG: multi-indexing sorting on axis=1 on >0 levels #14015
Comments
xref #13431 |
I seem to remember this exact issue, but can't find ATM. |
As discussed in some of those issues, MultiIndex sorting is based on the ordering in the levels. The levels are sorted on construction, but not on re-assignment. So a couple workarounds would be to construct the mi with the converted levels, or the index also has a
|
Is this something we could consider changing? |
Rather than basing MultiIndex sorting on something other than sorted levels, what about requiring that each |
That seems fairly reasonable, although the sorting behavior is documented, and I'm sure it would break somebody's code, though probably not too painful to detect/deprecate in 0.19, fix in 0.20 / 1.0? |
Yes, assuredly someone relies on the existing behavior, but we could probably deprecate it. In my opinion the fact that levels and labels can be sorted differently is a major source of confusion. One option with |
@chris-b1 : are you referring to the sentence "the present implementation of So if I'm not missing anything, it would be possible and great to have already in 0.19 the following behaviour: for each component of By the way: another case in which bad things currently happen is in a
|
I meant this note at the end of paragraph, though I agree that isn't super clear either.
|
Yes, it is rather hidden in the docs that sorting does sort according to the order of the levels. I am +1 to change the behaviour of sort to actually sort. But, if we do this by sorting the levels (on initialization, or when sorting), how many people would rely on the actual order of the levels? Eg if you use |
Looking at the MultiIndex docs, it looks like I'm less certain now that it's the right thing to always require that levels be sorted. There are some cases where this lets you do different types of indexing efficiently, and right now we expose most of the MultiIndex implementation directly as public API, so people are indeed probably making use of this. |
While I understand that both behaviours can be useful, to my eyes it is a bit unnecessary to provide another way (than But if supporting the two different behaviours is considered worth the effort, then maybe a parameter (e.g. What I strongly agree on is that the default behaviour should be changed, despite the backwards incompatibility. |
In a DataFrame with MultiIndex, sorting on the level with date values does not do anything (order remains unchanged). This happens for both row and column indexes. In my case I am starting with a string index, converting that to datetime index, have not tried with datetime values at the start.
Code Sample, a copy-pastable example if possible
Expected Output
Columns ordered by date is the expected output.
Actual output are columns in the original sort order (not even lexicographically sorted).
output of
pd.show_versions()
INSTALLED VERSIONS
commit: None
python: 3.5.1.final.0
python-bits: 64
OS: Windows
OS-release: 10
machine: AMD64
processor: Intel64 Family 6 Model 60 Stepping 3, GenuineIntel
byteorder: little
LC_ALL: None
LANG: en_US.UTF-8
pandas: 0.18.1
nose: 1.3.7
pip: 8.1.1
setuptools: 20.3
Cython: 0.23.4
numpy: 1.11.0
scipy: 0.17.1
statsmodels: 0.6.1
xarray: None
IPython: 4.1.2
sphinx: 1.3.1
patsy: 0.4.0
dateutil: 2.5.1
pytz: 2016.2
blosc: None
bottleneck: 1.0.0
tables: 3.2.2
numexpr: 2.6.0
matplotlib: 1.5.1
openpyxl: 2.3.2
xlrd: 0.9.4
xlwt: 1.0.0
xlsxwriter: 0.8.4
lxml: 3.6.0
bs4: 4.4.1
html5lib: None
httplib2: None
apiclient: None
sqlalchemy: 1.0.12
pymysql: None
psycopg2: None
jinja2: 2.8
boto: 2.39.0
pandas_datareader: None
The text was updated successfully, but these errors were encountered: