我有一個帶有重複索引的pandas DataFrame。每個索引有3行,它們對應於一組項目。有兩列,分別是a
和b
。將pandas DataFrame按多列和重複索引排序
df = pandas.DataFrame([{'i': b % 4, 'a': abs(b - 6) , 'b': b}
for b in range(12)]).set_index('i')
我想,這樣的數據幀進行排序:
- 都具有相同的指數行是相鄰的。 (所有組合在一起)
- 這些組按組內的最低值
a
以相反順序排列。
例如,在上述df
,前三項應與索引0
的那些,因爲對於這三行中的最低a
值是2,並且所有其它基團具有至少一個行同一個a
值低於2.後三個項目可能是組3或組1,因爲這兩個組中的最低a
值是1.最後一組項目應該是組2,因爲它有一行a
的值爲0.
- 在每個組中,項目按升序排序
b
。
所需的輸出:
a b i 0 6 0 0 2 4 0 2 8 3 3 3 3 1 7 3 5 11 1 5 1 1 1 5 1 3 9 2 4 2 2 0 6 2 4 10
我一直是這樣的:
df.groupby('i')[['a']].transform(min).sort(['a', 'b'], ascending=[0, 1])
但它給了我一個KeyError異常,而它只是變得那麼遠,如果我做i
列無論如何,而不是索引。
謝謝!這只是錯過了最後的標準,這些項目也是按「b」組排序的。 – user2034412
我沒有看到。修改爲包含'b'。 – Alexander