洗牌行我有一個熊貓DataFrame
使用的行的MultiIndex
:大熊貓在一定水平
index = pandas.MultiIndex.from_tuples(list(itertools.product(range(3), range(3))))
df = pandas.DataFrame(numpy.random.randn(9,3), index=index, columns=['A', 'B', 'C'])
A B C
0 0 2.400417 0.698638 1.231540
1 -0.023154 -2.110450 0.774964
2 -1.282392 -0.062794 1.471655
1 0 -1.081853 0.261876 -1.771075
1 -2.013747 -0.377957 -0.393802
2 1.711172 -0.552468 1.018727
2 0 0.155821 -0.222691 0.496586
1 0.563638 -0.756709 1.050212
2 -1.446159 -0.891549 0.256695
我想洗牌此數據框對指數的第一級,所以可能的結果將是:
A B C
1 0 -1.081853 0.261876 -1.771075
1 -2.013747 -0.377957 -0.393802
2 1.711172 -0.552468 1.018727
0 0 2.400417 0.698638 1.231540
1 -0.023154 -2.110450 0.774964
2 -1.282392 -0.062794 1.471655
2 0 0.155821 -0.222691 0.496586
1 0.563638 -0.756709 1.050212
2 -1.446159 -0.891549 0.256695
這是一個非常簡潔的解決方案。我結束了矢量化的排序是這樣的:'newindex = df.index [np.argsort(neworder [df.index.labels [0])]' –
榮譽的矢量化!你已經提高了我的Numpy-fu。有一點:因爲''np.sort'' /''np.argsort''默認情況下使用,這是不能保證穩定「快速排序」算法,它並不等同於使用Python的排序功能,這是保證穩定的。儘管在你的解決方案中排序可以使用參數''kind ='heapsort''來保持穩定。 – Garrett
@Garrett由numpy文檔(v 1.7.1)''heapsort''是不穩定的。然而,「mergesort」被認爲是穩定的。你爲什麼推薦一個呢? –