df.stack() behaving differently between 0.19.2 and 0.20.1 · Issue #16323 · pandas-dev/pandas (original) (raw)
import pandas as pd
import numpy as np
index = pd.DatetimeIndex(['2017-05-04', '2017-05-05', '2017-05-08', '2017-05-09',
'2017-05-10'],
dtype='datetime64[ns]',name = 'date', freq='B')
columns = pd.MultiIndex(levels=[['HSBA LN Equity', 'UCG IM Equity', 'ISP IM Equity'], ['LAST PRICE', 'HIGH', 'LOW']],
labels=[[0, 0, 0, 1, 1, 1, 2, 2, 2], [0, 1, 2, 0, 1, 2, 0, 1, 2]])
data = np.array([[ 663.8, 672.5, 661.1, 15.97, 16.02, 15.49, 2.76, 2.768, 2.694],
[ 658.6, 663.9, 656.0, 16.22, 16.48, 15.77, 2.842, 2.868, 2.77 ],
[ 660.6, 664.1, 658.9, 16.01, 16.49, 15.94, 2.852, 2.898, 2.826],
[ 664.9, 669.2, 662.5, 15.90, 16.41, 15.90, 2.848, 2.898, 2.842],
[ 670.9, 673.4, 663.8, 16.09, 16.15, 15.59, 2.85, 2.888, 2.802]])
df = pd.DataFrame(data, columns=columns, index = index)
HIGH LAST PRICE LOW
date
2017-05-04 HSBA LN Equity 672.500 663.800 661.100
UCG IM Equity 2.768 2.760 2.694
ISP IM Equity 16.020 15.970 15.490
2017-05-05 HSBA LN Equity 663.900 658.600 656.000
UCG IM Equity 2.868 2.842 2.770
ISP IM Equity 16.480 16.220 15.770
2017-05-08 HSBA LN Equity 664.100 660.600 658.900
UCG IM Equity 2.898 2.852 2.826
ISP IM Equity 16.490 16.010 15.940
2017-05-09 HSBA LN Equity 669.200 664.900 662.500
UCG IM Equity 2.898 2.848 2.842
ISP IM Equity 16.410 15.900 15.900
2017-05-10 HSBA LN Equity 673.400 670.900 663.800
UCG IM Equity 2.888 2.850 2.802
ISP IM Equity 16.150 16.090 15.590
The columns change order and the tickers no longer correspond to the correct prices.
0.19.2 maintains the correct hierarchy.