Я думаю, что самый простой способ - .iloc[[0, -1]]
.
df = pd.DataFrame({'a':range(1,5), 'b':['a','b','c','d']})
df2 = df.iloc[[0, -1]]
print df2
a b
0 1 a
3 4 d
Если вы используете SQL Server:
ORDER_BY cast(registration_no as int) ASC
ORDER_BY cast(registration_no as unsigned) ASC
явно преобразует значение в число. Другой возможностью достичь этого будет
ORDER_BY registration_no + 0 ASC
, который заставит неявный разговор.
На самом деле вы должны проверить определение таблицы и изменить ее. Вы можете изменить тип данных на int
, как это
ALTER TABLE your_table MODIFY COLUMN registration_no int;
Один способ упорядочения положительными целыми числами, когда они хранятся как varchar
, - это упорядочить по длине сначала, а затем значение:
order by len(registration_no), registration_no
Это особенно полезно, когда столбец может содержат нечисловые значения.
Примечание: в некоторых базах данных функция для получения длины строки может быть вызвана length()
вместо len()
.
order by
мало влияет на производительность.
– Gordon Linoff
5 November 2017 в 19:52
Я предполагаю, что ваш тип столбца - STRING (CHAR, VARCHAR и т. д.), а процедура сортировки сортирует его как строку. Что вам нужно сделать, так это преобразовать значение в числовое значение. Как это сделать будет зависеть от используемой вами системы SQL.
Я предпочитаю делать «PAD» для данных. MySql называет его LPAD, но вы можете обойтись и сделать то же самое в SQL Server.
ORDER BY REPLACE (STR (ColName, 3), SPACE (1), '0')
Эта формула предоставит ведущие нули на основе длины столбца 3. Эта функциональность очень полезен в других ситуациях вне ORDER BY, поэтому я хотел бы предоставить эту опцию.
Результаты: 1 становится 001, а 10 становится 010, а 100 остается неизменным.
Иногда у вас просто нет выбора, чтобы хранить числа, смешанные с текстом. В одном из наших приложений хост веб-сайта, который мы используем для нашего сайта электронной коммерции, делает динамические изменения фильтров из списков. Нет возможности сортировать по любому полю, кроме отображаемого текста. Когда нам нужны фильтры, построенные из списка, в котором говорится, что такие вещи, как 2 "до 8" 9 "до 12" 13 "до 15" и т. Д., Нам нужно было сортировать 2-9-13, а не 13-2-9, как это будет, когда считывая числовые значения. Поэтому я использовал функцию репликации SQL Server вместе с длиной самого длинного номера, чтобы набивать любые более короткие номера с ведущим пространством. Теперь 20 отсортировано после 3 и так далее.
Я работал с представлением, которое дало мне минимальную и максимальную длину, ширину и т. д. для типа и класса элемента, и вот пример того, как я сделал текст. (LB n Низкий и LB n Высокий - нижний и верхний конце 5 скобок длины.)
REPLICATE(' ', LEN(LB5Low) - LEN(LB1High)) + CONVERT(NVARCHAR(4), LB1High) + '" and Under' AS L1Text,
REPLICATE(' ', LEN(LB5Low) - LEN(LB2Low)) + CONVERT(NVARCHAR(4), LB2Low) + '" to ' + CONVERT(NVARCHAR(4), LB2High) + '"' AS L2Text,
REPLICATE(' ', LEN(LB5Low) - LEN(LB3Low)) + CONVERT(NVARCHAR(4), LB3Low) + '" to ' + CONVERT(NVARCHAR(4), LB3High) + '"' AS L3Text,
REPLICATE(' ', LEN(LB5Low) - LEN(LB4Low)) + CONVERT(NVARCHAR(4), LB4Low) + '" to ' + CONVERT(NVARCHAR(4), LB4High) + '"' AS L4Text,
CONVERT(NVARCHAR(4), LB5Low) + '" and Over' AS L5Text