Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 重新排序堆叠数据帧_Python_Pandas - Fatal编程技术网

Python 重新排序堆叠数据帧

Python 重新排序堆叠数据帧,python,pandas,Python,Pandas,我正在尝试重新排列堆叠的数据帧。例如,我有: import numpy as np testdf = pd.DataFrame(np.random.randn(5,4), index=range(1,6), columns = ['Eric','Jane','Mary','Don']) testdf.stack() 我的输出是: 1 Eric -0.301206 Jane 1.327379 Mary 1.066828 Don -0.429380 2

我正在尝试重新排列堆叠的数据帧。例如,我有:

import numpy as np
testdf = pd.DataFrame(np.random.randn(5,4), index=range(1,6), columns = ['Eric','Jane','Mary','Don'])
testdf.stack()
我的输出是:

1  Eric   -0.301206
   Jane    1.327379
   Mary    1.066828
   Don    -0.429380
2  Eric    0.196671
   Jane   -1.232447
   Mary    1.139221
   Don     1.441183
3  Eric   -0.912282
   Jane   -0.204741
   Mary   -0.802078
   Don     0.149269
4  Eric   -0.168387
   Jane    1.608617
   Mary    2.237823
   Don     0.973450
5  Eric   -0.290492
   Jane   -0.374205
   Mary    0.986653
   Don     1.584820
dtype: float64
有没有办法在不重新排列原始数据帧的列的情况下更改这些名称的顺序?我的最终目标是告诉pandas,
Eric、Don、Mary、Jane
是我以后所有输出的理想顺序,尽管它不是按字母顺序排列的,类似于R中的
levels
函数


我想做的事,谢谢

使用索引上的
set_levels
对值进行重新排序:

In [67]:

t.index.set_levels([[1,2,3,4,5],['Eric', 'Don', 'Mary', 'Jane']], inplace=True)
t
Out[67]:
1  Eric    1.139358
   Don    -0.368389
   Mary   -1.907364
   Jane    0.444930
2  Eric   -0.113019
   Don    -0.823055
   Mary   -1.397237
   Jane    0.268164
3  Eric   -1.246184
   Don     0.356804
   Mary   -0.286919
   Jane    0.845538
4  Eric   -0.674448
   Don     0.903695
   Mary    0.873403
   Jane   -1.321770
5  Eric    1.308402
   Don    -1.901295
   Mary    0.122430
   Jane    0.110339
dtype: float64
从docstrings中,(还有一个简短的解释):

更新

如果您的pandas版本为
0.15.0
或更高,则
set_levels
接受
level
arg,这使得调整其中一个级别更为清晰:

In [244]:

testdf.index.set_levels(['Eric', 'Don', 'Mary', 'Jane'], level=1, inplace=True)
testdf
Out[244]:
1  Eric   -0.026484
   Don     0.223672
   Mary    0.266461
   Jane    1.121323
2  Eric   -0.250781
   Don    -1.079661
   Mary    0.525879
   Jane    1.692250
3  Eric   -1.337944
   Don     0.765228
   Mary   -1.297232
   Jane    1.121497
4  Eric    2.611441
   Don     0.805786
   Mary   -0.174193
   Jane   -0.371906
5  Eric   -0.084597
   Don     1.794861
   Mary    0.766524
   Jane    0.150359
dtype: float64
In [244]:

testdf.index.set_levels(['Eric', 'Don', 'Mary', 'Jane'], level=1, inplace=True)
testdf
Out[244]:
1  Eric   -0.026484
   Don     0.223672
   Mary    0.266461
   Jane    1.121323
2  Eric   -0.250781
   Don    -1.079661
   Mary    0.525879
   Jane    1.692250
3  Eric   -1.337944
   Don     0.765228
   Mary   -1.297232
   Jane    1.121497
4  Eric    2.611441
   Don     0.805786
   Mary   -0.174193
   Jane   -0.371906
5  Eric   -0.084597
   Don     1.794861
   Mary    0.766524
   Jane    0.150359
dtype: float64