2 回答

TA贡献1876条经验 获得超7个赞
这似乎有点骇人听闻,但这里有:
In [11]: g_unstacked = g.unstack()
In [12]: g_unstacked
Out[12]:
y (-0.565, 0.12] (0.12, 0.791] (0.791, 2.57] [-2.177, -0.565]
x
(-0.068, 0.625] 0.389408 0.267252 0.283344 0.258337
(-0.892, -0.068] -0.121413 -0.471889 -0.448977 -0.462180
(0.625, 1.639] 0.987372 1.006496 0.830710 1.202158
[-3.124, -0.892] -1.513954 -1.482813 -1.394198 -1.756679
利用unique保留顺序*的事实(从g的索引中获取唯一的第一项):
In [13]: g.index.get_level_values(0).unique()
Out[13]:
array(['[-3.124, -0.892]', '(-0.892, -0.068]', '(-0.068, 0.625]',
'(0.625, 1.639]'], dtype=object)
如您所见,它们的顺序正确。
现在,您可以reindex这样:
In [14]: g_unstacked.reindex(g.index.get_level_values(0).unique())
Out[14]:
y (-0.565, 0.12] (0.12, 0.791] (0.791, 2.57] [-2.177, -0.565]
[-3.124, -0.892] -1.513954 -1.482813 -1.394198 -1.756679
(-0.892, -0.068] -0.121413 -0.471889 -0.448977 -0.462180
(-0.068, 0.625] 0.389408 0.267252 0.283344 0.258337
(0.625, 1.639] 0.987372 1.006496 0.830710 1.202158
现在顺序正确。
更新(我错过了列也没有顺序)。
您可以对列使用相同的技巧(必须链接这些操作):
In [15]: g_unstacked.reindex_axis(g.index.get_level_values(1).unique(), axis=1)
*这是系列独有的速度明显快的原因np.unique。
添加回答
举报