можно попробовать .sort_values()
и .rank()
. Вот что я получил из предоставленного вами DataFrame (поле времени нуждается в кавычках, BTW).
data9 = pd.DataFrame([
[1, 2, 3, '03:10:20:170', 'NEW', 90.1060, 'Agency'],
[1, 2, 3, '03:10:20:144', 'Trade', 90.1050, 'Principal'],
[1, 2, 3, '03:10:20:120', 'NEW', 90.1022, 'Agency'],
[1, 2, 3, '03:10:20:100', 'NEW', 90.1070, 'Agency'],
[1, 2, 3, '03:10:20:155', 'NEW', 90.1051, 'Principal']
], columns=['A', 'B','C','D','E','F','G'])
Сортировка по столбцам F и G, хотя вы, вероятно, могли бы добавить временное перечисление для номинальных значений, чтобы убедиться, что они ' отсортированы в правильном направлении для ваших целей. Или добавьте в столбце времени.
Эта схема заказа здесь работает, потому что:
В любом случае, .sort_values()
также может быть inplace
, если вы хотите использовать это.
In [0]: data9 = data9.sort_values(by=["F","G"], ascending=[True, True])
Данные вызова9 чтобы проверить результаты:
In [1]: data9
Out[1]:
A B C D E F G
2 1 2 3 03:10:20:120 NEW 90.1022 Agency
1 1 2 3 03:10:20:144 Trade 90.1050 Principal
4 1 2 3 03:10:20:155 NEW 90.1051 Principal
0 1 2 3 03:10:20:170 NEW 90.1060 Agency
3 1 2 3 03:10:20:100 NEW 90.1070 Agency
Затем мы можем ранжировать столбец «F» (вы можете использовать больше столбцов, просто включите их в список, как при использовании сортировки). После этого мы просто используем условие для выбора верхних 2 (что-нибудь ниже 3) и производим результаты, аналогичные ожидаемым.
In [1]: data9.loc[data9.loc[:, "F"].rank() < 3.0, :]
Out[1]:
A B C D E F G
2 1 2 3 03:10:20:120 NEW 90.1022 Agency
1 1 2 3 03:10:20:144 Trade 90.1050 Principal