2017-01-06 66 views
4

我有一個2000行和500列的數據框。我想按升序對每列進行排序。這些列沒有名稱,只是編號爲0-500。排序數據幀的所有列

隨機數據: df = pandas.DataFrame(np.random.randint(0,100,size=(2000, 500)), columns=range(500))

使用 df.sort_values(by=0,axis=0)各種各樣的第0列,符合市場預期。但是,然後使用df.sort_values(by=1,axis=0)對第1列進行排序,而是再次對第0列進行混洗。換句話說,我想要

index 0 1 2 
1  5 5 5 
2  6 7 5 
3  7 9 8 

但我一次只能得到一列排序。我試過df.sort_values(by=df.columns[0:524],axis=0),但是會引發關鍵錯誤。

回答

4

我想你可以通過values使用applynumpy.sortsort_values與皈依numpy array

df = df.apply(lambda x: np.sort(x.values)) 

另一種解決方案:

df = df.apply(lambda x: x.sort_values().values) 

print (df) 
 0 1 2 3 4 5 6 7 8 9 ... 490 491 492 \ 
0  0 0 0 0 0 0 0 0 0 0 ...  0 0 0 
1  0 0 0 0 0 0 0 0 0 0 ...  0 0 0 
2  0 0 0 0 0 0 0 0 0 0 ...  0 0 0 
3  0 0 0 0 0 0 0 0 0 0 ...  0 0 0 
4  0 0 0 0 0 0 0 0 0 0 ...  0 0 0 
5  0 0 0 0 0 0 0 0 0 0 ...  0 0 0 
6  0 0 0 0 0 0 0 0 0 0 ...  0 0 0 
7  0 0 0 0 0 0 0 0 0 0 ...  0 0 0 
8  0 0 0 0 0 0 0 0 0 0 ...  0 0 0 
9  0 0 0 0 0 0 0 0 0 0 ...  0 0 0 
10  0 0 0 0 0 0 0 0 0 0 ...  0 0 0 
11  0 0 0 0 0 0 0 0 0 0 ...  0 0 0 
12  0 0 0 0 0 0 0 0 0 0 ...  0 0 0 
13  0 0 0 0 0 0 0 0 0 0 ...  0 0 0 
14  0 0 0 0 0 0 0 0 0 0 ...  0 0 0 
15  0 0 0 0 0 1 0 0 0 0 ...  0 0 0 
16  0 0 0 0 0 1 1 0 0 0 ...  0 0 0 
17  0 0 0 0 0 1 1 0 0 0 ...  0 0 0 
18  0 0 0 0 0 1 1 0 0 0 ...  0 0 0 
19  0 0 0 0 0 1 1 1 1 0 ...  0 0 0 
20  0 0 1 0 0 1 1 1 1 0 ...  0 0 0 
21  0 0 1 0 0 1 1 1 1 1 ...  0 1 0 
22  0 1 1 0 0 1 1 1 1 1 ...  0 1 0 
23  1 1 1 0 0 1 1 1 1 1 ...  0 1 0 
24  1 1 1 0 0 1 1 1 1 1 ...  0 1 0 
25  1 1 1 1 0 1 1 1 1 1 ...  0 1 0 
26  1 1 1 1 0 1 1 1 1 1 ...  1 1 1 
27  1 1 1 1 0 1 1 1 1 1 ...  1 1 1 
28  1 1 1 1 0 1 1 1 1 1 ...  1 1 1 
29  1 1 1 1 0 1 1 1 1 1 ...  1 1 1 
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 
1970 97 98 98 98 98 98 99 98 98 98 ... 98 98 98 
1971 97 98 98 98 98 98 99 98 98 98 ... 98 98 98 
1972 98 98 98 98 98 98 99 98 98 98 ... 98 98 98 
1973 98 98 98 99 98 98 99 98 98 98 ... 98 98 98 
1974 98 98 98 99 98 98 99 98 98 98 ... 98 98 98 
1975 98 98 98 99 98 98 99 98 98 98 ... 98 98 98 
1976 98 98 98 99 98 98 99 98 99 99 ... 98 98 98 
1977 98 98 98 99 98 98 99 98 99 99 ... 98 98 99 
1978 98 98 98 99 98 98 99 98 99 99 ... 98 98 99 
1979 98 98 98 99 99 99 99 98 99 99 ... 98 98 99 
1980 98 98 98 99 99 99 99 98 99 99 ... 98 98 99 
1981 99 99 98 99 99 99 99 98 99 99 ... 99 98 99 
1982 99 99 98 99 99 99 99 98 99 99 ... 99 98 99 
1983 99 99 98 99 99 99 99 98 99 99 ... 99 98 99 
1984 99 99 98 99 99 99 99 99 99 99 ... 99 99 99 
1985 99 99 98 99 99 99 99 99 99 99 ... 99 99 99 
1986 99 99 98 99 99 99 99 99 99 99 ... 99 99 99 
1987 99 99 99 99 99 99 99 99 99 99 ... 99 99 99 
1988 99 99 99 99 99 99 99 99 99 99 ... 99 99 99 
1989 99 99 99 99 99 99 99 99 99 99 ... 99 99 99 
1990 99 99 99 99 99 99 99 99 99 99 ... 99 99 99 
1991 99 99 99 99 99 99 99 99 99 99 ... 99 99 99 
1992 99 99 99 99 99 99 99 99 99 99 ... 99 99 99 
1993 99 99 99 99 99 99 99 99 99 99 ... 99 99 99 
1994 99 99 99 99 99 99 99 99 99 99 ... 99 99 99 
1995 99 99 99 99 99 99 99 99 99 99 ... 99 99 99 
1996 99 99 99 99 99 99 99 99 99 99 ... 99 99 99 
1997 99 99 99 99 99 99 99 99 99 99 ... 99 99 99 
1998 99 99 99 99 99 99 99 99 99 99 ... 99 99 99 
1999 99 99 99 99 99 99 99 99 99 99 ... 99 99 99 

     493 494 495 496 497 498 499 
0  0 0 0 0 0 0 0 
1  0 0 0 0 0 0 0 
2  0 0 0 0 0 0 0 
3  0 0 0 0 0 0 0 
4  0 0 0 0 0 0 0 
5  0 0 0 0 0 0 0 
6  0 0 0 0 0 0 0 
7  0 0 0 0 0 0 0 
8  0 0 0 0 0 0 0 
9  0 0 0 0 0 0 0 
10  0 0 0 0 0 0 0 
11  0 0 0 0 0 0 0 
12  0 0 0 0 0 0 0 
13  0 0 0 0 0 0 0 
14  0 0 0 0 0 0 0 
15  0 0 0 0 1 0 0 
16  0 1 0 0 1 0 0 
17  0 1 0 0 1 0 0 
18  1 1 0 0 1 0 0 
19  1 1 1 0 1 0 0 
20  1 1 1 0 1 0 1 
21  1 1 1 0 1 0 1 
22  1 1 1 0 1 0 1 
23  1 1 1 0 1 0 1 
24  1 1 1 0 1 0 1 
25  1 1 1 0 1 0 1 
26  1 1 1 0 1 0 1 
27  1 1 1 1 1 0 1 
28  1 1 1 1 1 0 1 
29  1 1 1 1 1 0 1 
... ... ... ... ... ... ... ... 
1970 98 98 98 98 98 98 98 
1971 98 98 98 98 98 98 98 
1972 98 98 98 98 98 98 98 
1973 98 98 98 98 98 98 98 
1974 98 98 98 99 98 98 98 
1975 98 98 98 99 98 98 98 
1976 99 98 98 99 98 98 98 
1977 99 98 98 99 98 98 98 
1978 99 98 98 99 99 98 98 
1979 99 99 98 99 99 98 98 
1980 99 99 98 99 99 99 99 
1981 99 99 98 99 99 99 99 
1982 99 99 98 99 99 99 99 
1983 99 99 99 99 99 99 99 
1984 99 99 99 99 99 99 99 
1985 99 99 99 99 99 99 99 
1986 99 99 99 99 99 99 99 
1987 99 99 99 99 99 99 99 
1988 99 99 99 99 99 99 99 
1989 99 99 99 99 99 99 99 
1990 99 99 99 99 99 99 99 
1991 99 99 99 99 99 99 99 
1992 99 99 99 99 99 99 99 
1993 99 99 99 99 99 99 99 
1994 99 99 99 99 99 99 99 
1995 99 99 99 99 99 99 99 
1996 99 99 99 99 99 99 99 
1997 99 99 99 99 99 99 99 
1998 99 99 99 99 99 99 99 
1999 99 99 99 99 99 99 99 
+0

非常感謝你。這是唯一對我有用的答案。 – OfOurOwn

1
>>> df.sort_values(by=list(df.columns),axis=0) 
     0 1 2 
index   
1  5 5 5 
2  6 7 5 
3  7 9 8 
+1

化險爲夷我!非常感謝。 – gseattle

0
df.sort(['col1','col2', ..., 'colN'],ascending=False) 

df.sort(list(df.columns),ascending=False)