У меня есть датафрейм 2000 строк и 500 столбцов. Я хочу отсортировать каждый столбец в порядке возрастания. Столбцы не имеют имен, они просто пронумерованы 0-500.

Случайные данные: {{Х0}}

С помощью 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), но это приводит к ключевой ошибке.

13
OfOurOwn 6 Янв 2017 в 16:42

4 ответа

Лучший ответ

Я думаю, что вы можете использовать numpy.sort с помощью конструктора DataFrame или apply с помощью sort_values с преобразованием в numpy array с помощью values:

df = pd.DataFrame(np.sort(df.values, axis=0), index=df.index, columns=df.columns)

Другое решение:

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  
8
jezrael 21 Апр 2018 в 04:46
df.sort(['col1','col2', ..., 'colN'],ascending=False)

Или

df.sort(list(df.columns),ascending=False)
0
lps 6 Янв 2017 в 13:49

Я думаю, что самое элегантное решение в наше время - df.transform(np.sort).

1
TheBamf 20 Дек 2019 в 13:35
>>> 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
3
Roman Pekar 6 Янв 2017 в 13:46