Python, реорганизация массива numpy по значению в столбце 0, целые числа со знаком - PullRequest
1 голос
/ 05 марта 2020

У меня есть папка с набором данных, которая плохо отсортирована, и я хотел бы изменить информацию, которую я извлекаю из нее, когда я читаю ее. Поэтому мне интересно, есть ли простой способ сортировки следующего ввода:

[['-10' '10']

 ['-10' '20']

 ['-15' '10']

 ['-15' '20']

 ['-5' '10']

 ['-5' '20]

 ['0' '10']

 ['0' '20']

 ['10' '10']

 ['10' '20']

 ['15' '10']

 ['15' '20']

 ['5' '10']

 ['5' '20]

в следующий вывод:

[['-15' '10']

 ['-15' '20']

 ['-10' '10']

 ['-10' '20']

 ['-5' '10']

 ['-5' '20]

 ['0' '10']

 ['0' '20']

 ['5' '10']

 ['5' '20]

 ['10' '10']

 ['10' '20']

 ['15' '10']

 ['15' '20']]

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

Как насчет использования pandas данных?

import pandas as pd

data = [['5', '10'], ['4', '20']]

dataframe = pd.DataFrame(data).sort_values(by=0) #define by as index

print(dataframe)

#Output:
#   0   1
#1  4  20
#0  5  10
0 голосов
/ 05 марта 2020

Боюсь, вам нужно привести значения str к int для желаемого порядка сортировки. Затем вы просто хотите отсортировать список по нескольким атрибутам . Если вы хотите, чтобы str значения тоже были в выводе, вам также нужно привести назад.

import operator

a = [['-10', '10'],
     ['-10', '20'],
     ['-15', '10'],
     ['-15', '20'],
     ['-5', '10'],
     ['-5', '20'],
     ['0', '10'],
     ['0', '20'],
     ['10', '10'],
     ['10', '20'],
     ['15', '10'],
     ['15', '20'],
     ['5', '10'],
     ['5', '20']]

print(a)

b = [[int(e[0]), int(e[1])] for e in a]         # to int
b = sorted(b, key=operator.itemgetter(0, 1))    # sort
b = [[str(e[0]), str(e[1])] for e in b]         # to str

print(b)

Вывод:

[['-10', '10'], ['-10', '20'], ['-15', '10'], ['-15', '20'], ['-5', '10'], ['-5', '20'], ['0', '10'], ['0', '20'], ['10', '10'], ['10', '20'], ['15', '10'], ['15', '20'], ['5', '10'], ['5', '20']]
[['-15', '10'], ['-15', '20'], ['-10', '10'], ['-10', '20'], ['-5', '10'], ['-5', '20'], ['0', '10'], ['0', '20'], ['5', '10'], ['5', '20'], ['10', '10'], ['10', '20'], ['15', '10'], ['15', '20']]

Надеюсь, это поможет!


РЕДАКТИРОВАТЬ: Или просто использовать некоторые lambda выражение в sorted:

c = sorted(a, key = lambda x: (int(x[0]), int(x[1])))
print(c)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...