#python #dataframe #sorting #lambda
Вопрос:
У меня есть фрейм данных df_tgt_viz
pandas, и я пытаюсь отсортировать его по первым 2 кольцам. — (панды = 1.1.5)
value_lvl_1 value_lvl_2 metrics/pageviews
Country 1 1 to 5 minutes 1523.0
Country 2 10 to 30 minutes 140602.0
Country 1 10 to 30 minutes 4463.0
Country 1 30 to 60 minutes 84882.0
Country 1 30 to 60 minutes 403.0
Country 2 5 to 10 minutes 922.0
Country 2 5 to 10 minutes 67802.0
Country 1 30 to 60 minutes 84882.0
Country 1 less than 1 minute 14212.0
Я намерен использовать sort_values
метод с аргументом key=lambda x: x.map(custom_dict)
, чтобы задать порядок сортировки 2-го колла.
custom_dict =
{
'less than 1 minute': 0,
'1 to 5 minutes': 1,
'5 to 10 minutes': 2,
'10 to 30 minutes': 3,
'30 to 60 minutes': 4
}
Вопрос 1
Как я могу проинструктировать двойную сортировку значений, которые мне нужны? Моя попытка состояла в том, чтобы передать список key
аргументу, но это приводит к ошибке:
df_tgt_viz.sort_values(by=['value_lvl_1', 'value_lvl_2', 'metrics/orders'],
ascending=[True, True, False],
key=[lambda x: x.map(x), lambda x: x.map(custom_dict)],
inplace=False)
Вопрос 2
Как дополнительно отсортировать значения 1-го столбца, сгруппировав value_lvl_1
и metrics/pageviews
убавив их по каждой группе? Так, что страна с тоталом metrics/pageviews
находится на вершине.
Комментарии:
1. Если вы используете ключ, вызываемый объект будет вызываться для каждого столбца
by
независимо в документах . Поэтому вы не можете сортировать value_lvl_1 иначе, чем value_lvl_2 при использовании ключевого параметра. Я бы посоветовал вам создать столбцы справки для сортировки.2. Спасибо — Если невозможно выполнить четкую и двойную сортировку, в этом случае хорошим предложением является вспомогательный столбец.