如何通過兩列或更多列對python pandas中的dataFrame進行排序?假設我有一個包含列的數(shù)據(jù)框a,b并且c我想按列b升序排序數(shù)據(jù)幀,按列c降序排序,我該怎么做?
3 回答

MYYA
TA貢獻1868條經驗 獲得超4個贊
從pandas 0.17.0開始,DataFrame.sort()
不推薦使用,并設置為在未來版本的pandas中刪除?,F(xiàn)在是通過其值對數(shù)據(jù)幀進行排序的方法DataFrame.sort_values
因此,現(xiàn)在問題的答案就是
df.sort_values(['b', 'c'], ascending=[True, False], inplace=True)

明月笑刀無情
TA貢獻1828條經驗 獲得超4個贊
對于數(shù)字數(shù)據(jù)的大型數(shù)據(jù)幀,您可能會看到顯著的性能改進numpy.lexsort
,使用一系列鍵執(zhí)行間接排序:
import pandas as pdimport numpy as np np.random.seed(0)df1 = pd.DataFrame(np.random.randint(1, 5, (10,2)), columns=['a','b'])df1 = pd.concat([df1]*100000)def pdsort(df1): return df1.sort_values(['a', 'b'], ascending=[True, False])def lex(df1): arr = df1.values return pd.DataFrame(arr[np.lexsort((-arr[:, 1], arr[:, 0]))])assert (pdsort(df1).values == lex(df1).values).all()%timeit pdsort(df1) # 193 ms per loop%timeit lex(df1) # 143 ms per loop
一個特點是定義的排序順序numpy.lexsort
是相反的:首先(-'b', 'a')
按系列排序a
。我們否定系列b
反映我們希望這個系列按降序排列。
添加回答
舉報
0/150
提交
取消